Ruby, rbenv

最近はrbenv使っているので。

homebrewでインストール。

brew install rbenv

簡単な使い方。

rbenv install
usage: rbenv install VERSION
       rbenv install /path/to/definition

Available versions:
  1.8.6-p420
  1.8.7-p249
  1.8.7-p334
  1.8.7-p352
  1.9.1-p378
  1.9.2-p180
  1.9.2-p290
  1.9.3-dev
  1.9.3-p0
  1.9.3-preview1
  1.9.3-rc1
  2.0.0-dev
  jruby-1.6.3
  jruby-1.6.4
  jruby-1.6.5
  jruby-1.7.0-dev
  rbx-1.2.4
  rbx-2.0.0-dev
  ree-1.8.6-2009.06
  ree-1.8.7-2010.02
  ree-1.8.7-2011.03

rbenv install 1.9.2-p290
rbenv install 1.9.3-p0

プロジェクトのRAILS_ROOTとかで、

rbenv local 1.9.3-p0

などすれば、.rbenv-versionというファイルができます。
このファイルがある場所に移動するだけでrubyのバージョンが変わります。

この時gem install capistranoとかすると、
~/.rbenv/versions/1.9.3-p0
以下にインストールされるのですが、capifyコマンドが見つからない場合があります。
なので、

rbenv rehash

と実行すると、~/.rbenv/shims以下を更新してくれるのでコマンドが利用できるようになります。

ただ、railsに限ったことではないですが、rubyのスクリプト書くときはだいたいGemfileでbundle execなので、あまり気にすることもないのかな。

Rails, capistranoの設定メモ

rails3.2で色々な環境にデプロイしようとしたcapistrano設定のメモ
もっとよい設定があると思うけど、動くのでこれで。

Gemfileには書かない。

gem install capistrano capistrano-ext

group :developmentから:productionに変更。

vim Gemfile
 gem 'therubyracer'

capifyは実行済み。

mkdir config/deploy
touch config/deploy/production.rb
touch config/deploy/staging.rb

共通設定をconfig/deploy.rbに記述
config/deploy.rbの先頭に、require “capistrano/ext/multistage” を記述する。

ステージング環境(結合環境)は自分自身にデプロイしたい。

vim config/deploy/staging.rb
 set :deploy_to, "/path/to/dir"
 set :ssh_options, { :forward_agent => true }
 role :web, '127.0.0.1'
 role :app, '127.0.0.1'
 #role :db, '127.0.0.1', :primary => true

本番環境config/deploy/production.rbはいつもどおりに記述。

deploy:assets:precompileやcleanを実行できるようにする。

vim Capfile
 load 'deploy/assets' #コメントアウトを外す

deploy時にbundle installを実行したい。
config/deploy.rbにrequire “bundler/capistrano” を記述する。
deploy:update_code→bundle:installの順番に実行される?

deploy:assets:precompileをbundle:installの後に実行する。

vim config/deploy.rb
 before('deploy:assets:precompile', 'bundle:install')

deploy時にbundle execがうまく動かないことがあるので、cap deployを実行している.bundle/configのシンボリックリンクを作ったりする。shared_pathにファイルを置いておく。
(cap bundle:installしたときの.bundle/configファイル)

vim config/deploy.rb
 namespace :deploy do
   task :bundlesymlink do
     run "cp #{shared_path}/config/bundle_config #{release_path}/.bundle/config"
   end
 end
 before('bundle:install','deploy:bundlesymlink')

ステージング環境でのデプロイ方法は、

cap staging deploy