スキマハコ

わすれがちなスキマな事を詰め込んでいます。ITの他に暮らしについても書いています。

HerokuでWebサービスを公開するまでの記録をするよー

環境もろもろの設定

基本的な開発環境の設定はこちらを参考にしました。
Heroku(ヘロク)で,Ruby on Railsアプリを簡単に公開する方法の入門 (無料のRuby向けPaaS環境の使い方) - 主に言語とシステム開発に関して

IDEはNetBeans7を利用します。
設定方法の参考はこちら:
NetBeans 7.1にRuby on Railsプラグインをインストールする手順 - Rails 雑感 - Ruby on Rails with OIAX

ということでいまはこんな感じ。

# Rubyのバージョン
$ruby --version
ruby 1.9.3p125 (2012-02-16) [i386-mingw32]

# Gemのバージョン
$gem --version
1.8.16

# Railsインストール
$gem  i rails

# Gemインストール状況
$gem list

*** LOCAL GEMS ***

addressable (2.2.8)
bigdecimal (1.1.0)
bundler (1.1.4)
excon (0.14.3)
heroku (2.28.10)
heroku-api (0.2.7)
io-console (0.3)
json (1.5.4)
launchy (2.1.0)
mime-types (1.19)
minitest (2.5.1)
netrc (0.7.5)
rake (0.9.2.2)
rdoc (3.9.4)
rest-client (1.6.7)
rubyzip (0.9.9)

# ----- rails3.2で以下がインストール

actionmailer (3.2.6)
actionpack (3.2.6)
activemodel (3.2.6)
activerecord (3.2.6)
activeresource (3.2.6)
activesupport (3.2.6)
arel (3.0.2)
builder (3.0.0)
erubis (2.7.0)
hike (1.2.1)
i18n (0.6.0)
journey (1.0.4)
mail (2.4.4)
multi_json (1.3.6)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.2)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.6)
railties (3.2.6)
sprockets (2.1.3)
thor (0.15.4)
tilt (1.3.3)
treetop (1.4.10)
tzinfo (0.3.33)

# Gitの場所。現在64bitOSで開発中。でもなんかここに設定される…。
$where git
C:\Program Files (x86)\Git\cmd\git.exe

Railsのプロジェクトを作るよ

ここはNetBeansでプロジェクトを作るための備忘録になる。

Rubyプラットフォームはマシンにインストールしているバージョンであればいずれも選択可能。
コマンドラインで入力しても可

d:\>rails new meigo
jsonのエラーが出る場合

前も出た気がするんだけど・・・。
railsアプリケーションを作ったら、こんな風に表示される。

Gem::InstallError: The 'json' native gem requires installed build tools.

Please update your PATH to include build tools or download the DevKit
from 'http://rubyinstaller.org/downloads' and follow the instructions
at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'
An error occured while installing json (1.7.3), and Bundler cannot continue.
Make sure that `gem install json -v '1.7.3'` succeeds before bundling.

これにはこちらを参考にしました:
[仕事]WindowsでのRails3環境構築: サウスポーなSEの独り言
どうやらビルドするためのライブラリなどが足りない様子。

devkitをダウンロード:Download Archives 
展開するときは専用のディレクトリを用意したほうがいいかな。

d:\devkit>ruby dk.rb init
[INFO] found RubyInstaller v1.9.3 at C:/Ruby193

Initialization complete! Please review and modify the auto-generated
'config.yml' file to ensure it contains the root directories to all
of the installed Rubies you want enhanced by the DevKit.

d:\devkit>ruby dk.rb install
[INFO] Updating convenience notice gem override for 'C:/Ruby193'
[INFO] Installing 'C:/Ruby193/lib/ruby/site_ruby/devkit.rb'

この状態で、もう一度rails new アプリをして、エラーが出なければ終了。

なにを作る?

ここまできてから何を作るかって言うのもちょっとおばかさんなのだけれど、今回はtwitterbotを作る。

参考サイト:Herokuを使って1日1回名言をツイートするTwitter Botの作り方 - アインシュタインの電話番号☎

twitterのための設定

 botのための準備。

  1. twitterサービス用のアカウントを取得する。
  2. アカウントをサービスとしてアカウントに登録する。
twitterサービス用の設定

こちらを参考:8分21秒で分かるRubyとOAuthによるTwitterAPIの使い方(動画) - 昼メシ物語
現在(2012/7)だと記述形式はちがうけど、大体これにのっとって設定したよ。

twitter-oauthの設定

こちらを参考:Herokuを使って1日1回名言をツイートするTwitter Botの作り方 - アインシュタインの電話番号☎
すごく丁寧でわかりやすい!

この手順にほぼ従い、やっていったんだけど…。


エラーって言われるんだぜ…。

herokuのログを見る
$heroku logs
2012-07-07T16:02:27+00:00 app[web.1]: /app/config.ru:2:in `require': no such file to load -- app.rb (LoadError)
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/config.ru:2:in `block in <main>'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/config.ru:1:in `<main>'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/config.ru:1:in `new'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:137:in `start'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/bin/rackup:4:in `<top (required)>'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/bin/rackup:19:in `load'
2012-07-07T16:02:27+00:00 app[web.1]: 	from /app/vendor/bundle/ruby/1.9.1/bin/rackup:19:in `<main>'
2012-07-07T16:02:29+00:00 heroku[web.1]: Process exited with status 1
2012-07-07T16:02:29+00:00 heroku[web.1]: State changed from starting to crashed

えーと設定が足りないのかしら・・・。

rubyのバージョンにあった記述になっているか?

herokuのバージョンは1.9.x。RubyでTwitterのOAuth認証に必要なトークンを取得する - アインシュタインの電話番号☎のままでは稼動できないことに気づきました。

  • ソースエンコーディングは明示的に!

マジックコメントというやつですね。

# encoding: utf-8
  • requireで相対ソースファイルを読み込むときは"."をつける。

これは1.9.xからrequireの動作が変わったのが原因。
もともとは、requireはロードパスに基づいて、ライブラリを探すのですが、1.9からカレントディレクトリが除外されたので、見に行けなくなったのでした…。
解決方法として以下のとおり。
好みがあるかも。

# 明示的カレントを見るようにする。
require './app.rb'

# 相対パスで見に行く用の記述にする
require_relative 'app.rb'

# ロードパスにカレントディレクトリを追加しちゃう
$:.unshift File.dirname(__FILE__) 
require 'app.rb'

もー!私のうっかりさんめ…
とはいえ、Railsアプリとしてnewした場合はapp.rbには最初から$:.unshift File.dirname(__FILE__)みたいな記述があるので、本当は詰まらなかったところかも。