【Rails3】【Heroku】Rails3.1.0.rc5でHerokuを使う

最近設計の下手さや、テストの書けなさにしょんぼりしている海山です。

Rails for Zombies後もぞんび会(と勝手に呼んでいる)は続いております。
Herokuやりたいやりたい!!と言い続けていたのですが、本当に実現し、ちょうどいい機会だったので、Rails3.1rc5でやってました。

結構はまりました。
Herokuでなんとか動いている状態を確認できるようになるまでの最低限をまとめます。

すごく参考になったサイト様!

環境

※Gitは入っている前提です

Gemfileに追記

require ‘heroku’

group :production do
  gem 'pg'
  gem 'therubyracer-heroku'
end

下の方の'pg'と''therubyracer-heroku'を書いておかないと、

Installing pg (0.11.0) with native extensions /Users/sea_mountain/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:551:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

というエラーが出ます。

その後コマンドラインで
bundle install
するとエラー

Installing pg (0.11.0) with native extensions /Users/sea_mountain/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:551:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

がでてしまうので、

bundle --without production

というコマンドにします。

ちなみに

参考サイトではこの後

bundle update rake # rakeのバージョンが0.9.1が入っているので、これを打つように言われる

も書かれているので、必要そうなエラー文など出た場合は参考に。

Gitの準備

git init

をまずして、

git add ファイル

でファイルを追加

git commit -m "コミットメッセージ"

でローカルにコミットして、

git push heroku master

でHerokuに上げる。

余談

githubなどだと、id_rsa.pubをgithubのWebの設定ページに登録する必要がありますが、
Herokuは~/.ssh/id_rsa.pubが作ってあれば自動でアップロードしてくれます。
作ってない場合→http://help.github.com/mac-set-up-git/

Herokuの準備

heroku create

command not foundと言われた場合は…sudo gem install herokuで入れましょう。

自分のRailsプロジェクトのDBの状態をHeroku側でも設定します。
このままheroku rake db:migrateをすると以下のようにエラーが出るので、

$ heroku rake db:migrate
(in /app)
rake aborted!
uninitialized constant Rake::DSL
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
以下続く

Rakefileの先頭行に

require 'rake/dsl_definition'

を追加します。

この後忘れずにgit addしてcommitしてpushして…

heroku rake db:migrate

成功すると、こんな感じ。

(in /app)
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:10: warning: already initialized constant RUBY
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:84: warning: already initialized constant LN_SUPPORTED
Migrating to CreateUsers (20110808150710)
==  CreateUsers: migrating ====================================================
-- create_table(:users)
   -> 0.0242s
==  CreateUsers: migrated (0.0243s) ===========================================

上数行warningが出てますが…
ぐぐっても、解決法が見つからないので…とりあえずは置いておきます。
heroku openコマンドでブラウザが立ち上がって、Railsのindexページがちゃんと表示されたら成功です!


余談の余談

さくらレンタルサーバーのライトを借りて、Railsを動かそうと目論んでいたのですが…
頑張ってみましたが無理でした…Rails2系だと、Redmineが動いたという話などたくさん見つかるのですが…
Rails3系だと、よく分からないエラーで全然動かず… どうしようもなかったです。
その点、Herokuは簡単にRailsのバージョンもそんなに気にせずサクサク行けるので、すごい!
ただ、ローカルで動いていたのに、上げてみたら、赤文字が表示されているだけの、エラー文も表示されてないエラー画面が表示されることが多々…。
CSSファイルが少し間違っていたりするだけでも、コンパイル時に引っかかって、だめみたいです。少しはまりました。
ローカルで動いていても、Heroku上で動かないことも結構あると思っておくほうが良さそうです。

あと、cronは無料プランだと1日1回なので…botなどには使えないです…(なぜ最初にHerokuではなく、さくらレンタルサーバーを選んだか、もうおわかりですね…orz)


おかしい点や、補足など有りましたらぜひお願いします!ぞんび〜!