2011-08-06 2 views
1

Capistrano 및 Rails 3.1rc5와 함께 작동하는 RVM을 얻고 내가 찾은 지침에 혼동을줍니다. RVM의 웹 사이트 these instructions 제공RVM의 Capistrano 지침에 혼동을 들었습니다.

말 것을 :

새로운 옵션에서는 다음과 같은 작업을 수행 할 수 있습니다 (귀하의 개인 설정에 적응) :

이제
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path. 
require "rvm/capistrano"    # Load RVM's capistrano plugin. 
set :rvm_ruby_string, '[email protected]'  # Or whatever env you want it to run in. 

나는 그들이이 원하는 가정 우리의 deploy.rb 파일 맨 위에!?! 내가 본 "$:."을 보지 못했기 때문에 묻습니다. deploy.rb의 모습입니다.

"$:."으로 시작하는 줄이 정확히 무엇입니까? 그리고 그것은 deploy.rb 또는 다른 곳에 속해 있습니까?

+0

작성한 rvm-capistrano gem을 사용한 후에 그 줄을 제거하라는 메시지가 표시됩니다. 'RVM - Capistrano 통합이 별도의 보석으로 추출되었습니다.'gem install rvm-capistrano '를 설치하고 '$ LOAD_PATH.unshift'line' – lulalala

답변

3

$: 당신이 require 문을 사용할 때마다 루비는 검색 경로 인 $LOAD_PATH에 해당하는 특별 루비 변수입니다. .unshift(...)을 호출하면로드 경로의 앞면에 제공된 경로가 추가됩니다.

$:.unshift 문없이 require 'rvm/capistrano'을 방금 호출 한 경우 기본적으로 RVM의 Capistrano 라이브러리가 Ruby의로드 경로에 있지 않기 때문에 오류가 발생합니다. 다른 deploy.rb 파일에서 이것을 보지 못한 이유는 일반적으로 필요한 유일한 라이브러리가 cap deploy (또는 다른 cap 명령 중 하나)을 실행하여 포함 된 Capistrano 's이기 때문입니다.

deploy.rb 파일에 정확히 동일한 코드가 있으며 잘 작동합니다.

1

최상위 수준에 있어야 통화가 이루어지기 전에 설정되어야한다고 생각합니다. 번들 전에, 레이크 작업에, 등등. 이것은 나를 위해 문제가되었습니다. 제 경우에는 제 웹 서버와 응용 프로그램 서버가 같지 않습니다. 웹 서버에 rvm을 원하지 않습니다.

실제 해결책이 비교적 쉬운 경우에도 약간 검은 색 마술처럼 보입니다. 코드를 업데이트 한 후 .rvmrc 파일에 축복 된 보석 세트를 설정하면 수행해야 할 작업이 없습니다.

after "deploy:update_code", "deploy:rvm:setup" 

namespace :deploy do 
    namespace :rvm do 
    # Set up .rvmrc 
    # Note, not using method described in: 
    # https://rvm.beginrescueend.com/integration/capistrano/ 
    # We want to use RVM only on the app server, so better to set up and bless an .rvmrc file 
    task :setup, :roles => :app do 
     run "cd #{latest_release}; rvm use [email protected]#{application} --rvmrc --create && rvm rvmrc trust" 
    end 
    end 
end