서버에 두 개의 파일이 있습니다. 하나는 각 환경의 공유 디렉토리 인 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"