2012年4月25日水曜日

HerokuにRubyのコードをUPする

----
追記:
現段階では動いてはいますがサイトURLに飛べないです。
アプリケーションエラーがまだ消えてませんでした。

追記の追記:
プログラムを動かしながら、webプロセスを確保するには2dyno必要らしいので、課金しないとむりっぽいです。workingのdynoを1、webのdynoを1確保します。
その後、Procfileにあたらしくwebアプリに関する記述を追加し、
(私は「web: bundle exec thin start -p $PORT -e $RACK_ENV」って書いております)
$ heroku ps:scale web=1
とかすれば飛べるようになります。
でもherokuではプログラムからjsonへの書き出しが保証されていないみたいで、
結局この方法では実装できなかったという…w

----

RailsアプリをHerokuにUpしている例はたくさんあったのですが、RubyでかかれたコードをUpしている例は少なかったのでメモ。

はじめ、
・test.rb
・test.json
の2つのコードしかいれずにgit push heroku masterしたらpushできなかった。

いろんなサイトにこういう時はindex.phpのファイルをおけばいいと書いてあるが、
私が書いているのはphpじゃなくてrubyである。
index.phpをいれるとphpのコードとして認識されてしまう。

わからなすぎてHerokuの知り合いに質問してみると、
GemfileをいれるとRubyのコードとして認識されるらしい。

ほほー。

でもGemfileになに書いていれとくんだ?
まあとりあえずGemfileにはつかったgemをかいておいた。
それでbundle installしておいた。
やり方あってるのか心配だー

で、この段階でのfile構成

・test.rb
・test.json
・Gemfile
・Gemfile.lock(Gemfileをつくってbundle installしたら自動でできる)

これでもたしかダメだよってherokuさんに怒られた。
どうやらProcfileというものをつくらなきゃいけないらしい。

英語の資料あったぜ!
https://devcenter.heroku.com/articles/procfile

Procfileに関しては日本語資料がまだまだ少なくて、あんまり書き方わからない…

clockworkを使って、定期的に動くコードを書いていたので、
Procfileには
clock: bundle exec clockwork test.rb
と書いておいた。

clockwork参考資料:
Herokuでcron?もう古いかも、それ

ここのサイトすごく参考にさせてもらった。
それにしてもclockwork便利すぎてやばい。
1秒ごとにコードを動かしたりできる。なんかcron以上にすごい。

で、この段階のファイル構成。

・test.rb
・test.json
・Gemfile
・Gemfile.lock
・Procfile

これで、git push heroku masterは通るようにはなったんだけど、
heroku logs --tailでログをみているとエラーがでている模様。
これはアバウトに言うとwebアプリじゃないのにwebアプリの経路を断ち切っていなかったのが原因みたいで、

$ heroku ps:scale clock=1
とコマンドうったら治った。

なぜclock=1と書いているかというと、Procfileにclock: bundle exec clockwork test.rbと書いて、アプリ名をclockにすると指定したから。
1というのは1dynoをこのアプリにわりあてますよって意味らしい。
Webアプリは自動で1dyno確保しているけど、webアプリじゃないと自分でやらなきゃいけないらしいのです。
dynoって何?とりあえずよくわからないけどdynoってやつがわりあてられると動くらしい。

とりあえずこれで動くようになった!!わーい!!


で、この段階のファイル構成。

・test.rb
・test.json
・Gemfile
・Gemfile.lock
・Procfile
・index.html.erb

あ、なぜindex.html.erbが増えてるかというとね!
先輩にherokuでコードを共有しつつ作業をしていたら、
いつのまにかindex.html.erbを足してくれていた。

理由は正直よくわからないけど、まあ動いたからいっか。
index.phpを加えるのと同じノリなのかしらね。
(適当でごめんなさい)

以上、Herokuに関する適当なメモでした。

0 件のコメント:

コメントを投稿