短時間でプロトタイプを制作する場合には、インフラ構築のコストが低いHerokuはベストな選択肢のひとつです。ということで、Ruby 2.1とRails 4.0のプロジェクトをHerokuにPushするまでの手順を書いておきます。DBはPostgreSQL or MySQL、テンプレートエンジンはHaml、CSSフレームワークはBootstrap 3.0を使います。
この記事の一連のコマンドを半自動化できる『Application Template』を作りました。詳しくは『Rails4 x herokuアプリを5分でスタートできるapplication template作ってみた!』をご参照ください!
(03/21 09:40) かなりの分量ですので、タイトルを「簡単手順 => 詳細手順」に変更
🎉 手順詳細
Ruby 2.1をインストール
Ruby 2.0 => 2.1は今のところ問題もなく使えています。ということでRVM or Rbenv
で2.1をインストールしてプロジェクトを開始するのをお勧めします。ちなみにHerokuは12/25(Ruby 2.1リリース日)から2.1対応しています。
Heroku Toolbeltをインストール
Herokuを使う上で欠かせない、コマンドラインツールのHeroku Toolbeltをサイトからダウンロードしてインストールしてください。
PostgreSQL/pgの導入
Mac or CentOS限定ですが、Mac MountainLion/CentOS 6.4へのPostgreSQL 9.2の導入手順をよかったらご参考いただきつつ、PostgreSQLおよびgem pgをインストールしてください。MySQLの場合はここは読み飛ばしてください。
Railsプロジェクト作成
Railsの新規プロジェクトを作成。
# Heroku標準のPosgreSQLを使う場合 |
Rails用の.gitignore
を作成します。.gitignore
を生成するgitignore-boilerplatesを使う場合はこちら。(Macでのインストール方法は、brew install gibo
を実行)
# gibo --listでパラメータ確認可能 |
gitignore-boilerplatesを使わないで、GitHubから.gitignore
のテンプレートをダウンロードする場合はこちら。
wget https://raw.github.com/github/gitignore/master/Rails.gitignore;mv Rails.gitignore .gitignore |
.gitignore
から次のコードを削除。
config/initializers/secret_token.rb |
Gitリポジトリ作成を作成します。
git init |
Gemfileの設定
Gemfile
を編集して、bundle install
でGemをインストール。
(gemは適宜カスタマイズしてください)
ruby '2.1.0' |
Railsの基本的な設定
config/application.rb
の中にあるYourAppName::Application.configure
内に以下を追加。
# Set timezone |
続いてsecret_tokenの設定。/config/initializers/secret_token.rb
のsecret_key_baseを設定。sometoken
のところにはもともとのトークンをセット。
TestApp::Application.config.secret_key_base = ENV['SECRET_KEY_BASE'] || 'sometoken' |
Railsの日本語化ファイルを設定する。
wget https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -P config/locales/ |
application.js
に以下を追加してturbolinksで$(document).ready()
のイベントが発行するように修正。
//= require jquery |
Hamlへの変換
ViewのERB
をhaml
に変換。
# erb => hamlに変換。erbは削除 |
Bootstrap/Bootswach/Font-Awaresomeを使う手順
Bootstrap CDNから使いたい『Bootstrap/Bootswach/Font-Awaresome』の種類を選択。app/view/layouts/application.html.haml
に次のように記述。
(バージョンや書き方がよく変わるのでBootstrap CDN側を参照のこと)
%script{:src=>'//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js'} |
simple_formの設定
simple formの初期設定(bootstrap対応)。
rails g simple_form:install --bootstrap |
figaroの設定
Herokuの定数管理にお勧めのGem「laserlemon/figaro」です。Figaroの設定ファイルの生成。
rails g figaro:install |
kaminariの設定
Railsのページネーションgem「kaminari」の設定ファイルを生成。
rails g kaminari:config |
Databaseの設定
次にDB関連の設定。まずは、database.ymlの修正。developmentとtestの設定に以下を追加。
host: localhost |
PostgreSQLのユーザーを作成。途中でパスワードを聞かれますが、開発/テスト環境の場合は入力せずにENTER
だけでOKと思います。
createuser test-app -s |
続いてdevelopmentのDBの作成。(testも一緒に作成されます)
bundle exec rake RAILS_ENV=development db:create |
Pumaの設定
さらにアプリケーションサーバのpuma
を設定。以前はunicornをつかっていましたが、Herokuでasset compile時に極まれによくわからないエラーが発生してしまうので、解決できずに乗り換えました。herokuの時にはpumaも性能よさそうですよ。
ということでconfig/initializers/after_initialize.rb
を作成して、次の内容を記述。
Rails.application.config.after_initialize do |
Procfile
に次のコードを追加(or新規作成)。
web: bundle exec puma -t ${PUMA_MIN_THREADS:-8}:${PUMA_MAX_THREADS:-12} -w ${PUMA_WORKERS:-2} -p $PORT -e ${RACK_ENV:-development} |
pumaの起動。
foreman start |
http://0.0.0.0:5000
をブラウザで開いてエラーが出ていないことを確認。
RSpec/Spring/Guardの設定
RSpecのひな型の作成。
rails g rspec:install |
.RSpec
にはRSpecコマンドの引数を記述できます。次のとおり編集。
(詳細はRSpec –helpを参照)
echo '--color --drb -f d' > .rspec |
spec/spec_helper.rb
に以下を追加。
# 追加 |
続いてSpringのbinファイルを追加。
wget https://raw.github.com/jonleighton/spring/master/bin/spring -P bin/ |
さらにGuardの設定ファイルを追加。
bundle exec guard init |
生成されたGuardfile
の内容を変更。
guard :rspec do |
scaffold表示まで
scaffoldの作成してビューを追加。
rails g scaffold product name price:integer |
config/routes.rb
にて、ルートアクセス設定を追加。
root :to => 'products#index' |
DBのマイグレーション。
bundle exec Rake RAILS_ENV=development db:migrate |
http://0.0.0.0:5000
でscaffordしたビューが見れることをブラウザで確認。
Herokuのアプリを作成
Herokuにアプリを登録。
heroku create test-app |
secret_tokenを生成
次のコマンドを実行して、Herokuにsecret_tokenを生成してセット。
heroku config:set SECRET_KEY_BASE=`rake secret` |
タイムゾーンの設定
HerokuのタイムゾーンをTokyoに設定。
heroku config:add TZ=Asia/Tokyo |
NewRelicの導入
Herokuのアイドリング防止とエラー検出などを兼ねてNewRelicを導入。
まずは無料プランでセットアップ。
heroku addons:add newrelic |
次のコマンドでブラウザが起動してNewRelicの管理画面が開きます。
heroku addons:open newrelic |
『Get Started』ボタン => 2の『Generate Licence Key』ボタン => 4の『Download the newrelic.yml file』ボタンを実行。ymlファイルを/config/
に置きます。
/config/newrelic.yml
の中でapplication名を変更。
(test-app
は自分のアプリケーション名に変更してください)
app_name: test-app |
あとはdeployして5分後くらいに、Heroku addons:open newrelic
を実行すればNew Relic上でHerokuのパフォーマンスをチェックできます。
でモニタリング画面が表示されるようになったら、『Applications』=>『test-app』=>『Settings』=>『Availability Monitoring』=>『URL to ping』のフォームにhttp://test-app.herokuapp.com/
などHerokuで発行されたURLを記入して『Save to Change』ボタンを実行。
これで定期的にデフォルトでは1分おきにURLの死活監視をしてくれるようになるっぽいです!
Logentriesの導入
『Logentries』はログの保存や検索をサポートしてくれるサービスです。ログの中で特定のキーワードがあった場合にはエラーをメールしてくれます。Herokuの場合は致命的なエラーのキーワードがあらかじめ登録されているので、簡単にスタートできます。
heroku addons:add logentries |
MySQLを使う場合
ここからはMySQLを使う場合限定です。まずはHerokuアドオンのClearDBをアドオンを追加。
heroku addons:add cleardb:ignite |
次のコマンドを実行すると、CLEARDB_DATABASE_URL
の設定情報が見えます。
heroku config | grep CLEARDB_DATABASE_URL |
このMySQL://xxxx
以下をHerokuのDATABASE_URLにセット。
アダプタはmysql2
にするように注意が必要。
heroku config:set DATABASE_URL='mysql2 xxx' --app mimimiru-wh |
HerokuへのPush
HerokuへのPushを行う前に、Gitに最新のコードをコミット。
git add . -A |
いよいよ、HerokuへのPush。
git push heroku master |
あとはmigrationの実行。
heroku run rake db:migrate |
次のコマンドを実行するとブラウザが起動するので確認。
heroku open |
🏀 補足bundle execの省略
rbenv環境で、「rbenv-binstubs」を使うと、bundle exec
を省略できます。bundle install(bundle)
の際に次のコマンドを入力してください。
bundle install --binstubs=.bundle/bin |
🐝 Heroku両記事まとめ
herokuのDBにローカルのrailsアプリケーションからアクセス
AnosideをさくらのVPSからHerokuに移した話
SidekiqやMandrill、MySQLのデータをPostgreSQLのデータにコンバートする方法などが書かれています。
🐞 個人で使えそうなテック系サービス
kimono
Webサイトの特定箇所をWeb APIライクにJSON形式で取得できるサービス。
RSS-to-Email | MailChimp
RSSからメールを自動生成してくれるサービス・メルマガが充実している海外ならでは!
🎃 おもしろそうなGem
Railsなプロジェクトで利用している便利なGem一覧 - TIM Labs
モダンなRubyGemが数多くあります。Active Recordを簡単に書くことができる「Squeel」や「awesome_nested_fields」とか、これから試してみたい!
😼 参考リンク
@yoneappさんにconfig.serve_static_assets = true
を使わない方がいいよとドバイスをいただきました。助かりました。ありがとうございます! ^^
Ruby on Rails 4への移行でハマったポイント - Qiita [キータ]
Rails使いよspork, zeusからspringへ! | Act as Professional - hiroki.jp
ruby on rails - Heroku Config Secret Key Base Error - Stack Overflow
Rails4をHerokuに(クラウドに一歩一歩近づく) - 五十の手習い日記
Rails4時代の高速テスト環境 Rspec+Guard+FactoryGirl+Spring[NEW!] - Qiita [キータ]
Herokuで強制的にdb:migrateをやり直す。 - このブログは証明できない。
Herokuにmaster以外のブランチをデプロイする方法 stackoverflow
Ruby 2.0.0-p247 + Rails 4.0.0 + minimum-omniauth-scaffold - Qiita [キータ]
Pete : Avoid Heroku idling with New Relic pings
Getting Started with Rails 4.x on Heroku | Heroku Dev Center
Heroku+Rails4+Devise+MySQL+Redis - 成らぬは人の為さぬなりけり
rails 4 enabled rails to serve static assets: is it correct? (on heroku) - Stack Overflow
Code from the sideline — Rails Quick Tip: Set a secret token for Heroku deploy
🐹 変更来歴
(13/09/29 20:25) rails_config/simple_formを追加
(13/09/30 05:20) 記述ミスの修正、おまけの追加
(13/12/01 12:50) postgresql用のユーザー作成の手順を追記、gem『rails_12factor』を追加
(13/12/03 21:45) Herokuにマスタ以外のブランチをデプロイする方法を追加
(13/12/05 08:55) Herokuタイムゾーン設定を追加、ERB=>hamlへの変換を追加
(13/12/06 20:45) Herokuへの環境変数の設定と確認
(13/12/23 12:05) config.serve_static_assets = false
を削除
(13/12/23 15:20) rails-assets
を追加
(13/12/28 10:10) newrelicの記述を追加
(14/01/01 16:05) guard/spring/kaminari/figaro/puma
の設定を追加、unicorn、.Ruby-versionを削除
(14/01/03 23:55) Application Templateへのリンクを追加
(14/02/02 20:55) Heroku両記事まとめを追加
(14/03/21 09:40) かなりの分量ですので、タイトルを「簡単手順 => 詳細手順」に変更