【Rails3】【Heroku】Rails3.1.0.rc5でHerokuを使う
最近設計の下手さや、テストの書けなさにしょんぼりしている海山です。
Rails for Zombies後もぞんび会(と勝手に呼んでいる)は続いております。
Herokuやりたいやりたい!!と言い続けていたのですが、本当に実現し、ちょうどいい機会だったので、Rails3.1rc5でやってました。
結構はまりました。
Herokuでなんとか動いている状態を確認できるようになるまでの最低限をまとめます。
すごく参考になったサイト様!
- 223 Software「HerokuでRails3.1(RC1)を動かす方法」http://www.223soft.net/32
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ページがちゃんと表示されたら成功です!
参考サイト
- Heroku公式(http://devcenter.heroku.com/articles/quickstart0
- rakeの時に「uninitialized constant Rake::DSL」とか出た時(http://stackoverflow.com/questions/6181312/how-to-fix-the-uninitialized-constant-rakedsl-problem-on-heroku)
余談の余談
さくらレンタルサーバーのライトを借りて、Railsを動かそうと目論んでいたのですが…
頑張ってみましたが無理でした…Rails2系だと、Redmineが動いたという話などたくさん見つかるのですが…
Rails3系だと、よく分からないエラーで全然動かず… どうしようもなかったです。
その点、Herokuは簡単にRailsのバージョンもそんなに気にせずサクサク行けるので、すごい!
ただ、ローカルで動いていたのに、上げてみたら、赤文字が表示されているだけの、エラー文も表示されてないエラー画面が表示されることが多々…。
CSSファイルが少し間違っていたりするだけでも、コンパイル時に引っかかって、だめみたいです。少しはまりました。
ローカルで動いていても、Heroku上で動かないことも結構あると思っておくほうが良さそうです。
あと、cronは無料プランだと1日1回なので…botなどには使えないです…(なぜ最初にHerokuではなく、さくらレンタルサーバーを選んだか、もうおわかりですね…orz)
おかしい点や、補足など有りましたらぜひお願いします!ぞんび〜!