2012-02-16 12 views
4

私は、配備のためにbundlerとcapistranoを使用するRuby on Rails 3.2アプリを持っています。私のサーバは、rvmとruby 1.9.2のDebian Squeezeです。私はcapstrano(http://beginrescueend.com/integration/capistrano/)のrvmのものを読んで、set :rvm_ruby_string, '[email protected]_gemset'で宝石セットを設定することができます。Capistrano:Bundlerはrvm gemsetを使用していません

しかし、配備中、bundlerはすべての宝石を/var/www/my_app/shared/bundleに書き込みます。私は@記号でrvm_ruby_stringを定義すると、バンドラーはgemsetを使用すると思った。

展開からの出力は、私はRVMから[email protected]_gemset gemsetを使用するように--path /var/www/...を変更することができます

* executing "cd /var/www/my_app/releases/20120216145728 && bundle install --gemfile /var/www/my_app/releases/20120216145728/Gemfile --path /var/www/my_app/shared/bundle --deployment --quiet --without development test" 

を言いますか?

多分私は展開のためにいくつかの環境を使用しているので(ステージング、制作...)。だからここに私のdeploy.rbは

# RVM bootstrap 
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require 'capistrano/ext/multistage' 
require 'bundler/capistrano' 
require 'rvm/capistrano' 

set :rvm_bin_path, "/usr/local/rvm/bin" 
set :rvm_type, :system 

set :stages, %w(production staging) 
set :default_stage, "staging" 

set :application, "my_app" 
set :repository, "gitosi[email protected]:my_app.git" 

set :scm, :git 

set :user, "my_deploy_user" 

set :use_sudo, false 

set :ssh_options, { :forward_agent => true } 

default_run_options[:pty] = true 

namespace :deploy do 
    task :start do 
    end 
    task :stop do 
    end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 
end 

され、設定/展開/ staging.rb

set :rails_env, "staging" 
set :rvm_ruby_string, '[email protected]_gemset' 
set :deploy_to, "/var/www/my_app" 

role :web, "stage.mydomain.de"       # Your HTTP server, Apache/etc 
role :app, "stage.mydomain.de"       # This may be the same as your `Web` server 
role :db, "stage.mydomain.de", :primary => true # This is where Rails migrations will run 

にたぶん誰かが私を助けることができます。

+0

私はあなたが正しい以下の答えをマークしていることがわかります。これであなたの解決策は何でしたか?あなたはrvm gemsetではなく共有/バンドルを使うだけですか? – Donato

答えて

5

あなたは、バンドラーとrvmの統合を使用しています。 Rvmは正しいルビー(ルビー管理に便利)を使用していることを確認します.Bundlerはすべての宝石を共有/バンドルディレクトリに分割します。これは生産のためのバンドルのデフォルト設定です。私はこれがこれを設定する良い方法だと信じています。なぜなら、これは箱から取り出した乗客と一緒に働き、宝石を各アプリから分離し、ルビーを扱うrvmを持っているからです。

実際に宝石の分離にRVMを使用する場合は、ダーシー(this blogpost)で始めるのが最も良い方法です(これは乗客に適用されます)。ご覧のとおり、その作業にはいくつかの努力が必要ですが、可能です。

+0

基本的には、ステージングと本番環境では、/ shared/bundleを使用する必要があります。そしてローカル環境では、rvm gemdirにインストールされた宝石を使うだけでOKですか? – Donato

7

capistrano-bundler 1.1.2では、bundlerの引数からremove the --path flagにアクセスし、指定したgemsetにインストールすることができます。

私の設定は、最終的にどのように見えるかあります:

set :rvm_type, :system 
set :rvm_ruby_version, "[email protected]#{fetch(:application)}" 

set :bundle_path, nil 
set :bundle_binstubs, nil 
set :bundle_flags, '--system' 
関連する問題