herokuにRails3.2.1を入れてみる その2

前回herokuに突っ込んだRailsに、今度はいろいろなgemをインストールしてみたいと思います。
が、その前に。

前回githubリポジトリ名およびRailsのプロジェクトディレクトリ名に "SudokuSolver" としましたけど
Sudoku,数独って株式会社ニコリに商標登録されている言葉なんだそうで。
というわけでこれからは「ナンプレ」とでも表現していきます。
つまりプロジェクトは NumberPlaceSolver に名前変更ですね。

それはさておき、なぜ突然そんなことを言い出したか。
理由は「著作権」についてちょっと調べてみたからなんですが、
結論から言うと、『問題』に著作権はあるけど『完成形』には無いらしい。

せっかくのRails、何らかの形でデータベースは扱いたいなと思っていたので、
今回は解決したナンプレのみデータベースに保存してみようと思います。*1
誰得とか言わないでっ。やめたげてっ。

さて改めて続きを。
今回導入するgemは

ですよ。


RSpecとZenTestはBDD開発用、Thinはherokuで指定された*2サーバ、Foremanはサーバテスト用、
残りのHamlは趣味なので、要らないって人は無視してください。
本当はSporkとGuardを試したかったんですが、
RailsInstallerのDevKitでは依存するgemのコンパイルにやたら時間がかかったので
「まぁ機能的には変わらないやね」とZenTestのautotestを使用します。
Unix系orMac系の人は試してみるといいかもです。

とっとと開発に取り掛かるためにさっくりインストールしてしまいましょう。
RSpecHaml以外は導入するの初めてなんだけどいいのかな。いいよね。

Thinの依存関係でeventmachineなるものをbundlerがインストールしようとするんですが、
これがデフォルトでバージョンが 0.12.10 と3年前のパッケージ。
その上RailsInstallerに入っているDevKitではネイティブライブラリがコンパイルできないので、
明示的に新しいものを入れてやる必要があります。

> gem install eventmachine --pre

現時点では1.0.0.beta4.1です。
それからGemfileの編集。

gem 'eventmachine', '~> 1.0.0.beta'
gem 'thin'
gem 'haml-rails'

group :development, :test do
  gem 'rspec-rails'
  gem 'ZenTest'
  gem 'autotest-rails'
  # gem 'spork'
  # gem 'guard-spork'
end

eventmachineをthinの直前に入れているのは、
そうしないとインストールできない&古い安定版である 0.12.10 を入れようとするからです。
こう書いておけば依存関係は解決します。

> bundle install
> rails generate rspec:install

これで必要なgemパッケージは導入できました。
(ついでにRSpecの設定もしました。)
お好みで他のgemもどうぞ。

ここで rails server とすると、WEBrickではなくthinが立ち上がるはずです。
ただし、Windows環境なのでショッキングなほど遅いです。
多分VMwareのほうがまだ早い。いや絶対早い。

さて、herokuのドキュメントには「foremanとProcfileでThinが起動することを確認しろ」とあります。
今回 spork は導入していないので、サーバプログラムのバッティングの心配はなさそうですが、
Thinの依存パッケージであるeventmachineのバージョンが大きく違うので暗雲がたちこめています……。

> gem install foreman

それからRAILS_ROOTにProcfileというファイルを作って、こんな感じに書くみたいです。

web: bundle exec rails server thin -p $PORT

とりあえず指示通りに

> foreman start
C:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/foreman-0.40.0/lib/foreman/
process.rb:94: warning: failed to set environment variable. Ruby 1.9.3 will rais
e SystemCallError in this case.
19:33:21 web.1 | started with pid 4468

……。1分以上待っても音沙汰がないんですけど。
ドキュメントによると rails server してくれるらしいけど、音沙汰がないんですけど。
多分Windowsだからだそうに違いない、そうに違いないよ……。

勇気を出してcommitして、herokuにpushします。

> git add .
> git commit -m "added some gems and configured rspec, Procfile"
> git push heroku
> heroku open

おっと、予想に反して僕の環境では動いてますが、皆さんはどうでしょう。
なんとかここまでは無事のようで、とりあえず導入編は終わり……としたいところですが、
まだデータベースの設定が残っています。

次は database.yml の設定と、余裕があればモデルを作ってspecファイルの編集もしてしまいましょう。

*1:もちろん誰にでも見られると困るのでセッションで管理します。

*2:指定というよりは、ドキュメントに書いてあった、が正しいんだけど。