macを買って、今すぐherokuでruby1.9.3 + rails3.2しよう!

みなさんがmacを買う理由の1つにherokuを使ってRailsの開発がしたいというのがあると思います。そこで、今回はmacを買ってきてherokuにdeployするまでの手順を書いてみました。念のため、手元のマシンでLionをクリーンインストールしてからの手順を記述しています。

買う

もしmacを持っていなければ、今すぐ近くのmacが売っていそうなお店(そこらをぶらついているときにmacを売っているのを見たことありますよね!そこに行くんです!)で買ってきて下さい。ネットで買うといますぐこの記事に書いてあることを試すことができません。しかし、もうすぐ新しいmacとか出そうだから落ち着いた方がいい感もあるので、その辺は自己責任で判断しましょう。

ソフトウェアアップデート

これしないと不安。しましょう。(アップデート後に再起動を促されることも多いと思います。)

f:id:naoto5959:20120304134035p:plain

iTerm2

iterm2を入れます。

f:id:naoto5959:20120304134043p:plain

Downloadにあるcurrent versionを入れましょう。

f:id:naoto5959:20120304134051p:plain

command line tools for xcode

xcode入れても良いです。Apple Developerからダウンロードします。

インストール方法は、「XcodeからCommand Line Tools for Xcodeに切り替えたらHDD使用容量が7GB減った」という記事が大変わかり易かったです。

homebrew

homebrew入れます。ロゴの下にあるこれカッコいいな。

Homebrew The missing package manager for OS X

さて、以下のようインストールします。インストール中にPasswordの入力を求められたらログイン時のパスワードを入力して下さい。

/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

zsh

好みによるっちゃよるんですが、入れておくと便利でしょう。

brew install zsh
curl https://raw.github.com/gist/1970184/d7adf527117edd583de7b55141f8d7377a3b6cf6/.zshrc > ~/.zshrc

中身はこんな感じ

cat ~/.zshrc
export LANG=ja_JP.UTF-8

# homebrewを優先
export PATH=~/bin:/usr/local/bin:$PATH

source ~/.zshrc

シェルをかえる。以下のコマンドでパスワードの入力を求められたら、ログインパスワードを入力してください。

sudo sh -c "echo /usr/local/bin/zsh >> /etc/shells"
chsh -s /usr/local/bin/zsh

git

バージョン管理用にgitを入れます。

brew install git
git config --global user.name "your name"
git config --global user.email "youraddress@example.com"

automake

automakeを入れます

brew install automake

rvm

複数のRubyを管理するためにrvmを入れます。

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

PATHを通す。

vim ~/.zshrc

以下を足します。

# rvm
 -s "$HOME/.rvm/scripts/rvm"  && . "$HOME/.rvm/scripts/rvm"

面倒であれば

curl https://raw.github.com/gist/1970184/0c2cf14cbc696ceffcfc7b3c5cdeec84158e614e/.zshrc > .zshrc
source ~/.zshrc

ruby1.9.3

利用できるバージョンを確認しましょう。

rvm list known|grep 1.9.3
[ruby-]1.9.3-preview1
[ruby-]1.9.3-rc1
[ruby-]1.9.3-p0
[ruby-]1.9.3[-p125]
[ruby-]1.9.3-head

herokuではまだ1.9.3-p0しか使えないので1.9.3-p0を入れておきます。2012年3月4日現在では、1.9.3-p125とか指定すると、以下のように怒られちゃいます。2012年4月2日現在では、1.9.3-p125が利用出来ます。

f:id:naoto5959:20120304134106p:plain

rvm install 1.9.3-p125 --with-gcc=clang
rvm use 1.9.3-p125 --default

herokuアカウントを作成

メールを受け取る必要があるのでメールクライアントの設定は別途しておきましょう。herokuから"Sign Up"ボタンをクリックして進みます。

f:id:naoto5959:20120304134055p:plain

メールアドレスを入力します。このメールアドレスはherokuログイン時に使います。

f:id:naoto5959:20120304134058p:plain

メールクライアントを確認して、メールに書いてあるURLにアクセスし、herokuアカウントの作成を完了させましょう。アクセス後にアプリ作成などの画面が出ますがシカトしてすぐに閉じて良いです。

f:id:naoto5959:20120304134102p:plain

公開鍵を作成

ssh-keygen -b 2048

rvm gemset作成

rvm --create 1.9.3-p125@heroku-sample
gem install heroku --no-ri --no-rdoc

heroku login

heroku login

アカウント作成時に指定したメールアドレスとパスワードを入力します。

rails3.2.2をインストールしてherokuへデプロイする

railsをインストールします。

gem install rails --version 3.2.2 --no-ri --no-rdoc

アプリを作成します。mysqlでやるぜ、という方やrspecでtest書くし!という方は-d mysqlや-Tを指定しておくと良いでしょう。

rails new heroku-sample
cd heroku-sample

gitを初期化します。gitの使い方は別途、Git入門などをご覧になると良いでしょう。

git init
git add -A
git commit -m'init'

必要最低限のgemを記述します。

curl https://raw.github.com/gist/1970532/376b6a26ed936ac43cad0b17a64512f5c0216a50/Gemifile > Gemfile
rm -f Gemfile.lock
bundle install --without production
git add -A
git commit -m 'Update Gemfile'

中身はこんな感じ。herokuでは、PostgreSQL使うので、pgを指定したり、developmentでしか使わないものはそこに移動とかです。

source 'https://rubygems.org'

gem 'rails', '3.2.2'
gem 'jquery-rails'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

group :test, :development do
  gem 'sqlite3'
  gem 'heroku'
end

group :production do
  gem 'pg'
  gem 'thin'
end

herokuにアプリを作成します。

heroku create --stack cedar

Ruby1.9.3を使うにはheroku-labsの機能を使います。

heroku plugins:install http://github.com/heroku/heroku-labs.git
heroku labs:enable user_env_compile
heroku config:add RUBY_VERSION=ruby-1.9.3-p125

herokuにdeployします。

git push heroku master

初の接続時には以下のような文言が出るのでyesで進みます。

Are you sure you want to continue connecting (yes/no)?

デプロイ時に以下の文字列が出てれば、ruby1.9.3で動いてます。

Using RUBY_VERSION: ruby-1.9.3-p125

デプロイ後、作成したアプリを見てみましょう。

heroku open

ちょっとこのままだとつまらないのでscaffoldでアプリを作ってみましょう。

デフォルトのindex.htmlを消します。

rm -f public/index.html
git add -A
git commit -m'Delete default index.html'

scaffoldでブックマークアプリでも作ってみましょうか。

rails g scaffold bookmark name:string url:string
rake db:migrate
sed -i -e "s/  # root :to => 'welcome#index'/  root :to => 'bookmarks#index'/" config/routes.rb
git commit -m 'rails g scaffold bookmark'

今回のdeployではmigrationが必要なので、一旦メンテナンスモードにしてみましょう。

heroku maintenance:on

こうしておくとmigration前なのでエラーが表示されてしまうといったことがなくなります。

git push heroku master

heroku側のmigrationも実行します。

heroku run rake db:migrate

メンテナンスモードを解除します。

heroku maintenance:off
heroku open

以上で、herokuでruby1.9.3 + rails3.2することが出来ました。 あっという間ですね。本当に便利な世の中です。

herokuでrails3.1以降を動作させるときの注意点

stackはcedarで

前述の手順にある通りheroku createの際に --stack cedarを指定します。

assets:precompile周りのエラー対策

Ruby on Rails Guides: Asset Pipelineにあるとおり、herokuにdeployした際に、使っているgemによってはassets precomileの辺りでエラーが出ることがあります。その時の対処をしておきます。

config/application.rb

に以下を記述します。

config.assets.initialize_on_precompile = false

以下のコマンドで記述できるのでどうぞ。

echo config/application.rb |xargs perl -p -i -e 's/ end/ #for heroku\n config.assets.initialize_on_precompile = false\n end/'
git add -A
git commit -Add config.assets.initialize_on_precompile to false'
git push heroku master

therubyracerは必要?

どうやら現在は不要なようです。これで結構ハマリました。昔は必要だったよなーみたいなところで。

おまけ

今回作ったアプリはこちら

http://quiet-dawn-3034.herokuapp.com/

これからどうすればいいの?

やっぱり次はデザインをどうにかしたいよね、というわけで以前書いた「twitter bootstrap railsを使ったら職が見つかり彼女も出来て背も3センチ伸びました。」というフザけたタイトルの記事をご覧頂ければと思います。