2012-12-22 5 views
1

서버에 두 개의 파일이 있습니다. 하나는 각 환경의 공유 디렉토리 인 rvmrc입니다. 프로덕션에는 rvm use [email protected] --create이고 준비에는 rvm use [email protected] --create이 포함됩니다. 이것은 해당 shared/rvmrc 파일을 .rvmrc으로 연결하기 위해 배포 스크립트에 작업을 내장했기 때문에 응용 프로그램을 자체 gemset에서 실행할 수 있어야합니다. 그 작업은 내 deploy.rb 예 아래에 표시됩니다.스테이징 및 프로덕션 환경에 다른 gemset을 사용하도록 Capistrano를 구성하려면 어떻게합니까?

그래도 배포 중에 올바른 gemset을 사용하려면 bundler를 가져야합니다. set :rvm_ruby_string, "[email protected]#{rails_env}"을 사용하여 rvm_ruby_string을 환경의 gemset에 동적으로 설정하여이 작업을 수행 할 수 있다고 생각했습니다. 그러나, 내 배포자는 생산 젬 세트 만 사용합니다. cap staging deploy을 수행 할 때에도 마찬가지입니다.

도이 노력 (당신은 그냥 나쁜 아이디어라고 생각하면 차임을) 내 생각 과정에 대한 자세한 내용은 this question를 참조하십시오. 내 전개함에 환경에 따라 올바른 gemset를 사용하는 얻기 위해 변경해야 할 무엇

? 내 배포 파일에서

, 나는 (내가 꽤을 제거했습니다) 한 관련 라인은 다음과 같습니다 내 production.rb 파일에서

require 'rvm/capistrano' 
require 'capistrano/ext/multistage' 
require 'bundler/capistrano' 

set :stages, %w(staging production) 
set :default_stage, "staging" 
set :rvm_ruby_string, "[email protected]#{rails_env}" 
set :rvm_type, :system 
set :bundle_without, [:development] 

namespace :deploy do 
    task :rvmrc do 
    run "rm #{latest_release}/.rvmrc; ln -s #{shared_path}/rvmrC#{latest_release}/.rvmrc" 
    end 
end 

before "bundle:install", "deploy:rvmrc" 

, 내가 가진 관련 라인 (I ') 꽤을 제거했습니다은 다음과 같습니다

내 staging.rb 파일에서
set :branch, "master" 
set :rails_env, "production" 

, 나는 (내가) 상당히을 제거했다가 관련 라인은 다음과 같습니다

set :branch, "staging" 
set :rails_env, "staging" 

답변

1

응용 프로그램을 실행할 때 루비 버전과 gemset을 설정할 수 있습니다. 나는. 연결에있는 신과 사용을 위해 묘사되는 때 rvm wrappers를 사용하십시오. .rvmrc 심볼릭 링크 저글링이 그렇게 필요하지 않았습니다. ~ .rvm/빈/ree187prod_unicorn 당신을 제공

rvm use [email protected]pname-production 
rvm wrapper [email protected] ree187prod unicorn 

: 당신은 유니콘을 사용하는 경우

즉, 래퍼를 만듭니다. 시작 스크립트에서 유니콘 대신 사용하십시오. 유니콘은 올바른 루비 버전과 gemset을 사용합니다.

관련 문제