読者です 読者をやめる 読者になる 読者になる

えいのうにっき

あたまのなかのデトックスを、不定期的に。主に Web 系技術ネタ。

awesome_events を heroku にデプロイしてみた

Rails heroku 試してみた

PaaS ばっかやってたらダメだ、ってことで今の職場に転職してきたということもあり、Rails のお仕事をしている立場でありながら今まで heroku を触ったことがなかった僕(完全に言い訳)。でも、それはそれでどうなのよっていう雰囲気もひしひしと感じるようになってきたので、ここらで heroku の門を叩くことに。

あ、"awesome_events" とは、"パーフェクト Ruby on Rails" でのサンプルアプリケーションであり、先日、自身で写経をしたものでもある。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

サインアップ

Heroku | Sign up から。

サインアップしたら Getting Start って表示されたので、そのままそれに従ってみた。

Toolbelt のインストール

する。

heroku login

叩く。

$ heroku login
Enter your Heroku credentials.
Email: 
Password (typing will be hidden): 
Authentication successful.

デプロイするプロジェクトを準備する

Getting Start ではサンプルアプリを git clone してねってあるんだけど、ここは既に写経済みの awesome_events をデプロイすることにする。

$ cd awesome_events

heroku create

叩く。

$ heroku create
Creating desolate-lowlands-1807... done, stack is cedar-14
https://desolate-lowlands-1807.herokuapp.com/ | https://git.heroku.com/desolate-lowlands-1807.git
Git remote heroku added

これはなにかってーと、Create an app on Heroku, which prepares Heroku to receive your source code. とあるので、Git のリモートリポジトリみたいなもんが heroku 上に作られた、みたいなイメージか。GAE でいう app-id みたいなものをイメージしていたけど、微妙に違うっぽいな。

(後からわかったけど、 --app オプションでアプリケーション名を指定できるみたい。)

Now deploy your code: $ git push heroku master

えっ、git push が deploy...?

$ git push heroku master
Counting objects: 586, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (545/545), done.
Writing objects: 100% (586/586), 96.88 KiB | 0 bytes/s, done.
Total 586 (delta 293), reused 0 (delta 0)
remote: Compressing source files... done.

(中略)

remote:        Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
remote:        
remote:        /tmp/build_86deaf4f1d1e1b85f03878a507ae40c7/vendor/ruby-2.0.0/bin/ruby extconf.rb
remote:        checking for sqlite3.h... no
remote:        sqlite3.h is missing. Try 'port install sqlite3 +universal',
remote:        'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
remote:        and check your shared library search path (the
remote:        location where your sqlite3 shared library is located).

失敗した(´・ω・`)。ちょっと調べてみたら、heorku は DB に sqlite3 を使うのはアウツだったもよう。

Gemfile を修正。

# for heroku
group :production do
  gem 'pg'
end
group :development, :test do
  gem 'sqlite3'
end

開発機に PostgreSQL をインストールもしておく。アドオンの追加と migration もしなければならない。

$ heroku addons:add heroku-postgresql
$ heroku run rake db:migrate

で、リトライ。

$ git push heroku master

(中略)

remote: -----> Compressing... done, 27.9MB
remote: -----> Launching... done, v6
remote:        https://desolate-lowlands-1807.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/desolate-lowlands-1807.git
 * [new branch]      master -> master

お、できた?

heroku ps:scale web=1

Ensure that at least one instance of the app is running とあるので、このコマンドによりデプロイした Rails アプリケーションのインスタンスがひとつ、起動するイメージか。

$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:1X.

heroku open

なるほど、このコマンドでそのアプリケーションページがブラウザで開くわけね!ごくり。

$ heroku open          
Opening desolate-lowlands-1807... done

f:id:a-know:20141221164657p:plain

...そりゃ、secrets.yml は commit してないっすよダンナ。

config/secrets.yml をコミットし、値を環境変数としてセットする

いろいろ調べてみたんだけど、そういう方法を取るしかないみたい。...んー、なんか少しもにょるんだけど、そんなもんなんだろか。

commit / push できるように、値を直書きしていたものを環境変数を参照するように変更。

その後、$ heroku config:add SECRET_KEY_BASE=xxxx環境変数の設定を行い、再push、再open。

f:id:a-know:20141221164716p:plain

みれた...、、けどなに、この残念な感じは...(´・ω・`)

こちらの方のはうまく見えている...なぜだ。

rails_12factor の導入

こんなのみつけた。

Heroku で Rails 4 を動かすために必要な rails_12factor という gem を導入します。この gem はアプリが Heroku 上で動作できるように、Rails の動作を変更します。例えば、ログは保存先が変更され、静的アセット(アプリの画像、スタイルシートJavaScript ファイル) は Heroku 向けに微調整が加えられています。

...そうすか...便利な世の中っすね...(ヽ´ω`)

Gemfile を修正。

# for heroku
group :production do
  gem 'pg'
  gem 'rails_12factor'
end

気を取り直して、再々open。

f:id:a-know:20141221164835p:plain

でけーた!(∩´∀`)∩ワーイ

感想

やっぱり PaaS は便利だなぁと思った(こなみかん)

参考にさせていただいたサイトなど

Heroku入門 - Qiita

Heroku に push したら、sqlite3 のエラーが発生 | mofu犬blog

bundle install からの〜 gem install pg でハマったので覚え書き - nemomemo

Rails4.1でherokuへのデプロイに失敗(Missing `secret_key_base`) - JanGaJan.com

『パーフェクトRuby on Rails』を全部読んで写経してHerokuにデプロイした / マスタカの ChangeLog メモ

http://railsgirls.jp/heroku/