Lesson5


Lesson4の復習

gemを使う

Rubyに働いてもらう


サイトを公開する

いよいよ、自分のアプリを公開する日がきました。
出来はともかく、便利に使うために作ったアプリですから、使ってナンボですね。

ただ、アプリを公開するにはサーバーが必要ですが、サーバーの勉強までするのはなかなか大変です。
ここではherokuという初心者にも比較的優しい、サーバーのことを知らなくても何とかなるサービス(お試し程度なら無料!)があるので、それを使いましょう。

確認として、heroku上ではRubyのバージョンがデフォルトで1.9.3のようです。自分の使っているRubyのバージョンがいくつか確認して、あとでカスタムしましょう。
また、バージョン管理システムのgitを使う必要があります。gitのことがよくわからないという方は、こちらのページに最低限必要なことが書いてありますので、参考にしてください。


herokuへのリリースの流れ

herokuへリリースする際の手順は以下のとおりです。

  1. herokuのアカウントを取る
  2. heroku toolbeltのインストール
  3. ssh鍵を作る
  4. 公開鍵(*.pub)を登録する
  5. ssh認証鍵のPATHを設定する
  6. herokuにloginする
  7. DB用gemの準備
  8. URLを作る
  9. gitでherokuへpushする
  10. heroku上のDBをmigrateする

たくさんあるようですが、1~4は1度すれば必要ありません。5もPCの設定によっては必要ないこともあります。
ひとつずつ手順を確認していきましょう。


1. herokuのアカウントを取る

herokuのサイトにアクセスしてSign upしましょう。
アカウントを作るだけでは課金されたりしないので安心してください。


2. heroku toolbeltのインストール

heroku toolbeltのサイトにアクセスして、自分のOSのheroku toolbeltをインストールしましょう。
heroku専用のコマンドを使用するので、必ずインストールしてください。
gitが初めての方も、こちらでgitがインストールされるので便利です。


3. ssh鍵を作る

herokuとのやり取りはsshで通信します。
これに必要な鍵(と呼ばれるファイル)を作成しましょう。
いくつかのやり取りが必要なので、それぞれ入力してください。
パスワード(passphrase)は入力しなくても次に進めますが、よりセキュアにするために設定することをオススメします。

$ ssh-keygen -f ~/鍵ファイルを置くPATH/鍵のファイル名

4. 公開鍵(*.pub)を登録する

今作ったsshの公開鍵(拡張子が.pub)をherokuに登録します。
間違ってもここで秘密鍵(拡張子がない)をaddしないでください。
万が一間違ってaddしてしまった場合は、安全のためにssh鍵を作りなおしましょう。

$ heroku keys:add ~/鍵ファイルを置くPATH/鍵のファイル名.pub

5. ssh鍵のPATHを設定する

herokuにloginするために、自分のPCへssh鍵のPATHを設定しておきます。
これをすると、login時にssh鍵の場所をいちいち書かずに済みます。

$ ssh-add ~/鍵ファイルを置くPATH/鍵のファイル名

このときの鍵ファイル名は秘密鍵のほうです。

もし、ssh-addでエラーになるときは、以下のコマンドでssh-agentというプロセスを起動してみてください。

$ eval `ssh-agent`

6. herokuにloginする

herokuにアクセスするために、ターミナルからloginしておきます。
いくつかの質問がありますが、emailとパスワードはherokuアカウントを作成したときのemailとパスワードです。
ssh keyは自分で作成したので”n”を入力してください。

$ heroku login

7. DB用gemの準備

heroku上のDBは、postgresqlです。他のDBも使えるのですが、課金されたりもしますので、一旦ここはこのままにしておきましょう。
postgresqlを使用するための準備をします。gemが必要なのでGemfileを編集します。
まずは以下の行を追加します。

Gemfile

gem 'pg', group: :production

後ろに:productionとありますが、これはアプリを起動するときのモードのことです。
railsはproduction(本番)モード、development(開発)モード、test(テスト)モードの3つの起動モードがあります。
heroku上にアプリを乗せると、自動的にproductionモードで起動されるので、そのときだけpostgresqlのgemを使うという意味です。

今、自分のPCで何気なくrails sとコマンドをたたいているときは、developmentモードで動いています。
このときはsqlite3を使用しているので、sqlite3のgemにも細工をしておきます。
(DBの設定は、config/database.ymlに書いてありますので、気になる人は見てみてください。)
gem ‘sqlite3’という行があるはずですので、その後ろに:developmentを追加しましょう。

Gemfile

gem 'sqlite3', group: :development

herokuに限らず、RailsはGemfileではなく、Gemfile.lock(bundle installしたら自動で変更されるgem管理ファイル)を見て必要なgemがインストール・設定されます。忘れずにbundle installしてgitへコミットしておいてください。

$ bundle install
$ git add .
$ git commit -m "change and add gems for heroku."

RubyバージョンもGemfileで指定することができます。例えば、2.1.4を使用する場合は、ファイル内に

ruby "2.1.4"

と記入してgitへコミットしてください。

また、この後にもでてくるAsset Pipelineを有効にするために、

gem 'rails_12factor', group: :production

もGemfileへ追加して、bundle installとgitへのコミットを行ってください。herokuの場合はこれがないと、デザインが反映されません。
heroku以外へデプロイする場合にも必要なことがあるかもしれませんので、ご注意ください。


8. URLを作る

アプリにアクセスするにはURLが必要ですが、無料版では自分のドメインを使うことはできません。
heroku上のプロジェクト名がURLの一部に使われます。
例えば、プロジェクト名が minamirb だとすると、URLは http://minamirb.herokuapp.comになります。

herokuサイトにログインしてプロジェクトを作る方法もありますが、ターミナルからherokuのプロジェクトを作った方があとがラクなので、
コマンドで作ってしまいましょう。
アプリのディレクトリにcdしてからコマンドを実行してください。

$ cd 自分のアプリのディレクトリ
$ heroku create プロジェクト名

もし、このプロジェクト名が他の人とかぶっていた場合は、その旨メッセージが帰ってくるのでご心配なく。


9. gitでherokuへpushする

いよいよ、herokuへアプリを預けるときがきました。
ターミナルからgitでherokuへ渡します。
herokuへ渡す前に、アプリのコードがすべてcommitされているかどうか確認してください。

$ cd 自分のアプリのディレクトリ
$ git push heroku master

実行すると、問題なければターミナル上でherokuがgemのインストールをしたり、
アプリを公開する準備をしてるメッセージがずらーーーーっと流れてきます。
問題がなければ、最後に

http://プロジェクト名.herokuapp.com/ deployed to Heroku

のようなメッセージが帰ってくるので確認しましょう。


10. heroku上のDBをmigrateする

herokuへのpushができたら、実はもうアプリのURLは生きています。試しに自分のURLへアクセスしてみてください。
でも、何か変な画面が出てきますよね?DBの準備がまだなんです。RailsはmigrateしないとアプリのDBは出来ませんでしたね。
ということで、heroku上のDBをmigrateしましょう。

$ heroku run rake db:migrate

これでどうでしょう?無事にherokuのURLからアプリが見られましたか?


デプロイ時の注意:Asset Pipeline

Rails Guide を参照ください。。。


おまけ

エラー画面の見方

最初のうちは、エラー画面が出るとそれだけでびっくりして冷や汗ものだと思います。
でも、Railsのエラー画面は親切にいろんなことを教えてくれているので、落ち着いて読んでみましょう。
ここでは、よくあるエラー画面の見方と、よくあるエラーをご紹介します。

Rails Error Window

  1. エラーのタイトル
    “NoMethodError”が、今回のエラーの名前です。これが何を意味するかは、あとでお話します。”in”のうしろがどのactionで起きたかを示しています。
    “Animes#show”は、animes_controllerのshowメソッドで”NoMethodError”が起きたという意味です。
  2. エラーが起きたコードの場所
    実際にどのファイルのコードでエラーが起きてしまったかを示しています。
    最初の”…/show.html.erb”が該当ファイルで、”line #10”というのがそのファイルの10行目という意味です。
  3. エラーの具体的な内容
    具体的なエラー内容を示しています。
    ここでは、’contents’というメソッドは、”for”後ろに書いてあるオブジェクトで定義されていませんという意味です。
  4. エラーが起きたコードの表示
    エラーが起きた箇所の前後を表示してくれています。
    10行目に”<%= @anime.contents %>”があって、この.contentsが@animeで定義されてないようです。
  5. エラーが起きるまでの内部トレース
    エラーになるまでrailsの中のどこのコード、メソッドが動いていたかを示しています。
    ほとんどの場合1~4の内容でエラー原因の特定はできますが、railsに深く関わるようなエラーになるとこのとレースが役に立ちます。

よくありがちなエラー


これでMinami.rbの初心者レッスンは終わりです。おつかれさまでした

This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License

produced by Minami.rb