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 アプリをして、エラーが出なければ終了。
なにを作る?
ここまできてから何を作るかって言うのもちょっとおばかさんなのだけれど、今回はtwitterのbotを作る。
参考サイト:Herokuを使って1日1回名言をツイートするTwitter Botの作り方 - アインシュタインの電話番号☎
twitterのための設定
botのための準備。
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__)みたいな記述があるので、本当は詰まらなかったところかも。