主専攻実験enPiTで少し幸せになれるTips #1

こんにちは。

このブログが授業の中で触れられた結果、Twitterの新規フォロワー2名と授業参加者からの白い目を獲得しました。

僕は元気です。皆様いかがお過ごしでしょうか。

まえがき

主専攻実験enPiTの1日目が終了しました。enPiTではRuby on Railsを用いてアプリケーション開発を行いますが、数十名で同時に開発となると様々なハマりポイントが出てきます。

僕はRails上級者では決して無いのですが、気になったものをいくつかピックアップして解説を試みます。

目次

PostgreSQLが上手く動かない

PostgreSQLはデータベースシステムです。enPiTでは、Herokuへのデプロイを想定してローカル環境でもPostreSQLを動作させることになっています。以下では、Homebrewを用いてPostgresQLをインストールした前提で話を進めていきます。

まず、PostgreSQLの状態を確認するためには psql コマンドを実行してみると良い です。

$ psql

出てきたエラーメッセージを読んでみましょう。

パターン0:rails newでコケる

以下のようなエラーが出ることがあります。

An error occurred while installing pg (1.1.4), and Bundler cannot continue.
Make sure that `gem install pg -v '1.1.4' --source 'https://rubygems.org/'` succeeds before
bundling.

これはPostgreSQLが正常にインストールされていないことに起因します。下記コマンドでPostgreSQLをインストールします。

$ brew install postgresql

先ほど rails new コマンドは途中で終了してしまっています。続きを再開するために以下のコマンドを入力しましょう。

$ bundle install

パターン1:PostgreSQLが起動していない

PostgreSQLを使う場合、バックグラウンドで起動されている状態にしなければなりません。

psqlコマンドを実行したときに以下のようなエラーが発生した場合、PostgreSQLが起動していない可能性が高いです。

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

以下のコマンドでPostgreSQLを起動することができます。

$ brew services start postgresql

パターン2:データベースが存在しない

これはenPiTの資料でも説明されています。以下のような画面が出た場合、データベースが作成されていない可能性が高いです。

以下のコマンドを実行してデータベースを作成しましょう。

$ rails db:create

Railsが起動しない

$ rails s

がうまく動かない場合です。

パターン1:他の何かが起動している

rails sをしたときにエラーが大量に出るはずですが、その一番下に注目してください。

`initialize': Address already in use - bind(2) for "::1" port 3000 (Errno::EADDRINUSE)

というようなエラーが出ていた場合、他の何かが起動している可能性が高いです。Railslocalhost:3000というIP + ポートで起動しようと試みたのですが、他のwebアプリか何かが同じIP + ポートで起動しようとしているために起動できずエラーが返ってきます。

根本から対処するためには起動している他のアプリを停止する必要がありますが、その場しのぎ的には、以下のようにポートを変更してあげることで起動できるかもしれません。

$ rails s -p 3030

パターン2:Railsのゾンビが残っている

rails sした後、メッセージ最下部に以下のような文言が出る場合、Railsが死んでも死にきれていない可能性があります。

A server is already running. Check /<your project path>/tmp/pids/server.pid.
Exiting

エラーの本来の意味は「既に他のサーバが起動しているぞ」です。まずは既にRailsサーバを立ち上げていないか確認しましょう。

Railsが立ち上がっていないにも関わらずエラーが発生することも稀に起こります。本来、Railsはサーバを終了するときに /<your project path>/tmp/pids/server.pid を削除するはずなのですが、強制終了した際など、何らかの拍子にこれが残ってしまうことがあります。

この場合、手でこのファイル(/<your project path>/tmp/pids/server.pid)を削除すればOKです。

Railsでエラー画面が出る

rails sは問題なく実行できるものの、エラー画面が出る場合です。エラーには無数の種類があるので解説を省きますが、エラー画面の見方を説明します。

エラー画面は、上の図の番号順に見ていくと良いです。①で解決できれば儲けもの、④まで見ても解決しなければ厳しい戦いです。

①にはエラーのタイトルが書かれています。上記の例では ActiveRecord::NoDatabaseError となっていますね。どうやらデータベースが存在しないことがエラー原因だと分かります。パッと見て解決しない場合、タイトル文字列をそのままGoogleで検索してみましょう。かなりの確率で解決に繋がるはずです。

②にはエラーの概要が書かれています。タイトルを補足する程度の内容です。

③にはエラーを直接引き起こしたコードが示されます。どのソースコードかは、後ほど説明する④の最上行に示されています。注意するべきは、③に表示されるのはエラーを直接引き起こしたコードであり、エラーの原因となったコードではないということです。エラーの原因が掴めない場合、④に目を移します。

④にはエラーを引き起こしたコードから順に、「そのコードを呼出したコード」が列挙されます。エラーを直接引き起こしたコードには問題がなくても、そのコードを呼び出したコードに問題がありエラーが起こることは良くあります。

以上の①から④までを丁寧に見ればエラーは解決することになっています。エラーが解決しない場合、その場で座禅を組んで瞑想を始める他に手はありません。ご愁傷様です。

複数のGitHubのアカウントを使い分けたい

インターンやバイトでGitHubのアカウントを作って使っていたものの、今回新しく別のアカウントを作って開発したいという場合、アカウントを切り替える必要があります。

原則は基本通り、GitHubに指示されるまま下記のようなコマンドを実行すればOKなはずです(コマンド内のURLはサンプルなのでそのままコピペしても動きません)。

$ git remote add origin https://github.com/sample/sample.git
$ git push -u origin master

しかし、人によっては下記のようにエラーが返ってくることがあります。

error: The requested URL returned error: 403 Forbidden while accessing https://github.com/sudame/where2eat.git/info/refs

fatal: HTTP request failed

このエラーが出たら、GitHubの認証が通っていない可能性が高いです。

簡易的には、以下のようにすれば簡単に認証できます。your-github-usernameの部分は自分のGitHubアカウントのユーザ名にしてください。例えば僕なら sudame です。

$ git remote add origin https://your-github-username@github.com/sample/sample.git
$ git push -u origin master

これを実行すると、GitHubのパスワードを聞かれるはずなので、適切に入力してやりましょう。

しかし上記の方法ではGitHubにpushするたびにパスワードを聞かれて億劫です。余裕があればこちらの記事の通りに作業をすればOKです。

最後に

他に「ここみんな詰まってたよね」「死ねRails」などという情報がありましたら @dev_sudame までリプをください。書き足すかもしれません。