2011年12月16日金曜日

RubyでHerokuにデプロイするまでのメモ for Mac OS X (Snow Leopard)

Ruby使ったことないけどHerokuを使いたいがためにRailsを勉強することになった。
ちなみにHerokuは現在Node.js, Clojure, Java, Python, Scalaもサポートしているので
Railsじゃなくてもいいだろってツッコミがありそうだけど、もともとRubyのPaaSなので。
ということで環境構築からHerokuでデプロイするまでの流れをメモ。

事前準備

  • Xcodeインストール
  • MacPortsインストール
  • Gitインストール
  • Herokuのアカウント作成

MacPortsアップデート

$ export PATH=$PATH:/opt/local/bin/ # MacPortsのパスを通す
$ sudo port -d selfupdate
$ sudo port -d sync

RVM(Ruby Version Manager)インストール

$ bash < <(curl -sk https://rvm.beginrescueend.com/install/rvm)
$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bash_profile
$ source .bash_profile
$ rvm --version

rvm 1.10.0 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]

Rubyインストール


Herokuでのサポートされている1.9.2をインストール。
Macにもともと入っているRubyは1.8.7なので別途インストールする必要がある。
$ rvm pkg install readline
$ rvm install 1.9.2 --with-readline-dir=$HOME/.rvm/usr
$ rvm use 1.9.2 --default
$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]

必要なパッケージのインストール

$ gem install rails
$ gem install sqlite3
$ gem install heroku

プロジェクト作成

$ mkdir project
$ cd project
$ rails new herokuapp

ひな形を作成してマイグレーションを実行


どうせならHello World的なやつではなくscaffoldを使ってみる。
$ cd herokuapp
$ rails g scaffold Product title:string description:text image_url:string price:decimal
$ rake db:migrate

ローカルで実行


ローカルでアクセスしてみる。
$ rake routes
    products GET    /products(.:format)          {:action=>"index", :controller=>"products"}
             POST   /products(.:format)          {:action=>"create", :controller=>"products"}
 new_product GET    /products/new(.:format)      {:action=>"new", :controller=>"products"}
edit_product GET    /products/:id/edit(.:format) {:action=>"edit", :controller=>"products"}
     product GET    /products/:id(.:format)      {:action=>"show", :controller=>"products"}
             PUT    /products/:id(.:format)      {:action=>"update", :controller=>"products"}
             DELETE /products/:id(.:format)      {:action=>"destroy", :controller=>"products"}

$ rails s
ブラウザでhttp://localhost:3000/productsにアクセス。
正常にアクセス出来たら次へ。

Heroku用に修正&追加


Herokuは無料の範囲だとPostgreSQLを使うことになるのでGemfileの内容を下記のように書き換える。
gem 'sqlite3'
↓
gem 'pg'

必要なパッケージをインストールしてGitのローカルリポジトリへコミット。
$ sudo port install postgresql84
$ sudo ln -s /opt/local/bin/psql84 /usr/bin/psql
$ gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
$ bundle install
$ RAILS_ENV=production bundle exec rake assets:precompile
$ git init
$ git add .
$ git commit -m "Generate rails app."

Herokuへデプロイ


一番最初にHerokuアプリを作成する場合、emailとパスワードの入力を求められるので入力する。
$ heroku create
Enter your Heroku credentials.
Email: u1aryz.d@gmail.com
Password: 
Creating fierce-autumn-9435... done, stack is bamboo-mri-1.9.2
http://fierce-autumn-9435.heroku.com/ | git@heroku.com:fierce-autumn-9435.git
Git remote heroku added

$ git push heroku master
$ heroku rake db:migrate

デプロイされたWebアプリへアクセス

$ heroku open
これでブラウザが立ち上がるはずなので、urlにルートのパス(/products)を追加してアクセス。
最初はだいぶ手こずったけど次からは楽ちん。
便利な時代になったなー。

0 件のコメント:

コメントを投稿