2011-06-08 71 views
4

我試圖設置capistrano來輕鬆部署我的rails3應用程序。我對軌道很陌生。與Capistrano搭配使用rvmsudo

一切正常,因爲它應該除了我試圖重新啓動獨立的乘客服務器。

我在同一臺服務器上運行redmine,所以我跟着http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/得到多個版本的ruby/rails運行。這工作正常,直到我試圖讓卡皮斯特拉諾重新啓動乘客服務器。

的問題是「須藤」不允許放行環境設置(如上找到:sudo changes PATH - why?

一切正常,如果我可以使用,而不是「須藤」 rvmsudo',因爲rvmsudo沿着正確的通行證環境信息。但是,如果我在我的Captistrano部署中使用'rvmsudo',它會掛起等待我的sudo密碼。

我想實現一個try_rvmsudo,其功能與try_sudo完全相同,它會在需要時發送密碼。但我似乎無法找到任何有關這樣做的信息。

這裏是我嘗試使用重新啓動命令:

desc "Restart Passenger server" 
task :restart, :roles => :app, :except => { :no_release => true } do 
    run <<-CMD 
     if [[ -f #{release_path}/tmp/pids/passenger.#{passenger_port}.pid ]]; 
     then 
     cd #{deploy_to}/current && #{passenger_path}passenger stop -p #{passenger_port} --pid-file #{release_path}/tmp/pids/passenger.#{passenger_port}.pid; 
     fi 
    CMD 
    # restart passenger standalone on the specified port/environment and as a daemon 
    run "cd #{deploy_to}/current && rvmsudo #{passenger_path}passenger start -e #{rails_env} -p #{passenger_port} -a 127.0.0.1 -d --pid-file #{release_path}\ 
/tmp/pids/passenger.#{passenger_port}.pid" 
    end 

而且它掛起說:

** [out :: snapshotroulette.com] [sudo] password for deployer: 

回答

3

好了,我發現我可以有Capistrano的先發sudo的密碼(通過運行sudo命令)。 Sudo會在短時間內記住您的密碼(默認爲5分鐘)。而且,rvmsudo只是簡單地調用一些設置了環境變量的sudo,所以它也記得你的密碼。

這不是真的很漂亮,但它的工作原理:

desc "Restart Passenger server" 
task :restart, :roles => :app, :except => { :no_release => true } do 
    # Hack to have capistrano enter the sudo password (for rvmsudo later) 
    sudo "whoami" 
    run <<-CMD 
     if [[ -f #{release_path}/tmp/pids/passenger.#{passenger_port}.pid ]]; 
     then 
     cd #{deploy_to}/current && rvmsudo passenger stop; 
     fi 
    CMD 

    # restart passenger standalone on the specified port/environment and as a daemon 
    # The sleep 1 is to give the server enough time to spawn. The session was closing before it spawned, so it never actually spawned 
    run "cd #{deploy_to}/current && rvmsudo passenger start -e #{rails_env} -p #{passenger_port} -a 127.0.0.1 -d --pid-file #{release_path}/tmp/pids/passeng\ 
er.#{passenger_port}.pid && sleep 1" 
    end 

任何其他的解決方案,歡迎!

0

rvmsudo掛capistrano的問題似乎已經在rvm的更新版本中得到修復。對於我在目標機器上運行的'rvm get stable'修復了這個問題。