速修Rails3 - Herokuデプロイへの道

http://www.geekzshu.com/rails/1148
データベースはデフォルトのsqlite3でやります。
(Rails3+MySQL+cygwin(win7)はなんかうまくいかない)

rails new <app名>
cd <app名>
bundle install
rails generate scaffold コントローラー名 カラム名:型 …
(例:rails generate scaffold customer name:string email:string address:text)
rake db:migrate(→rake db:createは必要なし:Rails2.xとの違い)

これでdb/に development.sqlite3という名のデータベースができる。
覗いてみると、

@db: $ sqlite development.sqlite3
sqlite3> .databases
sqlite3> .tables

ちゃんと生成されているのが分かる。
で、サーバを起動して確認。

rails s

http://localhost:3000/customers/ にアクセス。
Hooray, well done!

そして念願のherokuへのデプロイを試します。
http://devcenter.heroku.com/articles/rails3

その前にgitの設定ですが、
ssh-keygenがないとcygwinに言われました。
単体のコマンドはないみたいなので、setup.exeからopensshを落とします。
これでうまくいきました。

$ git init
$ git add .
$ git commit -m "init"

heroku add:keysでssh公開鍵を設定するなど。


なんかsqlite3でエラーが出てる。
http://stackoverflow.com/questions/7868686/rails-3-1-sqlite3-error-on-push-to-heroku
どうやらPostgreSQLをローカルで使うのが良いらしい。
やり直し。

マニュアルを読み落としてました。
Gemfileを

- gem 'sqlite3'
+ gem 'pg'

に変更する。
つまり、sqlite3は使わないってことか?
それともローカルでsqlite3を使いつつ、gemにはPosgreSQLを指定してherokuと整合性を保つのだろうか。

まあいいとして、pushしてみる

$ git push heroku master

おk。アップロード完了。
で、マイグレーション

$ heroku run rake db:migrate

なんかOperation not permitted的なエラーが出た。
herokuサイドによれば、次の呪文を唱えよとのこと。
http://stackoverflow.com/questions/7567040/issue-with-running-a-migration-on-heroku

$ heroku run bash --app <app名>
$ heroku run rake db:migrate

うむ...まだエラーが出ている。
Command not found: tput cols, tput lines
調べると、windows環境(Cygwin)にtputコマンドが入っていないことが原因とのこと。
http://stackoverflow.com/questions/6229560/unable-to-run-on-heroku
tputはcygwinのncursesパッケージに入ってるらしい。
setup.exeからncursesを入れました。
それでもダメ。
ruby1.9に変えろとの声が。
http://stackoverflow.com/questions/8914040/mirage-rake-tasks-fail-when-mirage-is-not-runnning
なのでcygwinにrvmをインストールします。
http://d.hatena.ne.jp/portgus/20110416/1302919209
まずsetup.exeからgit,curl,readline,fileをインストールします。

すごく時間がかかりましたがなんとかruby1.9.2がインストールされました。
バージョンを確認すると、

ruby -v

1.8.7のままです。

rvm use 1.9.2 --default

で設定しようとしますが、rvm is not a commandとか言われました。
どうやら1.8.7はrvmでなくcygwinのsetup.exeから入れたのが
問題のようです。
躊躇なく1.8.7をsetup.exeからアンインストールします。
で、ruby -vすると1.9.2になってます。
ここで

heroku run rake db:migrate

すると、/usr/bin/ruby.exeに関するエラーがでますが、
現在/usr/bin/ruby.exeは存在しないので(cygwinから入れた1.8.7を消したから)
シンボリックリンクを張ります。(これで良いのかは不明)

$ ln -s /usr/local/rvm/bin/ruby /usr/bin/ruby.exe

結局rvmからのruby1.9.2がうまくherokuと連動しないので
rvmをアンインストール。
http://d.hatena.ne.jp/milk1000cc/20111002/1317545875

$ rvm seppuku

で、ソースからインストール。
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Ruby+Install+Guide%3A%3ACygwin+%28%A5%BD%A1%BC%A5%B9%A4%AB%A4%E9%29

$ ./configure --enable-shared
$ make
$ make install

この場合も/usr/bin/ruby.exeが入ってないので、シンボリックリンクを張りました。

ln -s /usr/local/bin/ruby /usr/bin/ruby.exe

何回もgem install herokuやってたらkeys:addするの忘れてた。

$ heroku keys:add ~/.ssh/id_rsa.pub

heroku runするとunable to remapのエラーがでるが、
これはrebaseallで解決できる。
ash.exeからrebaseallするときは一度cygwinを閉じてからやりましょう。http://d.hatena.ne.jp/basyura/20110706/p1

よくエラーを読むと、
Gemでrailsがないとか言っている(笑)
めんどくさいけど入れなおすか。rake,bundleをgem installで入れなおしました。
rails

ERROR:  While executing gem ... (NoMethodError)
    undefined method `call' for nil:NilClass

とかいうエラーがでています。
https://github.com/railsmachine/shadow_puppet/issues/10
gemspecは直したとRailsの中の人はおっしゃっています。

bundlerをインストールしたので bundle installしますが、
これによって「Gemfileに書いてあるgemをインストール」
ということが行われるようです。
http://aws.lefthandz.org/wordpress/2012/01/deploy-rails-3-1-x-to-heroku/

Rails installerを試します。
これだとうまくいきそう。
git push heroku masterするとPermission deniedがでました。
ssh公開鍵id_rsaパーミッションが緩すぎるとのことです。
644から600に変更します。
なぜかコマンドプロンプトからだとできないので
新たに作りなおすことにします。
ssh-keygenはコマンドプロンプトに入ってないので
mysysgitをインストールします。
http://d.hatena.ne.jp/ruedap/20110404/mac_ssh_key_copy_error



http://aws.lefthandz.org/wordpress/2012/01/deploy-rails-3-1-x-to-heroku/

http://freezing-mist-9019.herokuapp.com/

<参考>
神動画。これを見れば説明はいらないかも。
http://el.jibun.atmarkit.co.jp/rails/2010/12/rubypaasheroku-.html
ツイッターをheroku上につくる
http://d.hatena.ne.jp/ruedap/20110209/ruby_heroku_twitter_bot