PaaS ばっかやってたらダメだ、ってことで今の職場に転職してきたということもあり、Rails のお仕事をしている立場でありながら今まで heroku を触ったことがなかった僕(完全に言い訳)。でも、それはそれでどうなのよっていう雰囲気もひしひしと感じるようになってきたので、ここらで heroku の門を叩くことに。
あ、"awesome_events" とは、"パーフェクト Ruby on Rails" でのサンプルアプリケーションであり、先日、自身で写経をしたものでもある。
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る
サインアップ
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
...そりゃ、secrets.yml は commit してないっすよダンナ。
config/secrets.yml
をコミットし、値を環境変数としてセットする
いろいろ調べてみたんだけど、そういう方法を取るしかないみたい。...んー、なんか少しもにょるんだけど、そんなもんなんだろか。
commit / push できるように、値を直書きしていたものを環境変数を参照するように変更。
その後、$ heroku config:add SECRET_KEY_BASE=xxxx
で環境変数の設定を行い、再push、再open。
みれた...、、けどなに、この残念な感じは...(´・ω・`)
こちらの方のはうまく見えている...なぜだ。
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。
でけーた!(∩´∀`)∩ワーイ
感想
やっぱり PaaS は便利だなぁと思った(こなみかん)
参考にさせていただいたサイトなど
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 メモ