2014-02-18 19 views
0

我使用Ubuntu 12.04.4 TLS瞭解RubyGems的 '需要' 的須藤VS rvmsudo

我寫/home/abdo/sample_serv.sh一個簡單的shell腳本執行一個Ruby文件:

#!/bin/bash 
/home/abdo/.rvm/rubies/ruby-2.1.0/bin/ruby /home/abdo/sample_serv.rb 

/home/abdo/sample_serv.rb含下面的代碼:

puts $: 

require 'sinatra' 

set :port, 8084 

get '/' do 
    %{ <html><body>Hello from Abdo</body></html> } 
end 

執行rvmsudo ./home/abdo/sample_serv.sh工作得很好,但我想獲得sudo ./home/abdo/sample_serv.sh通過將NE工作因爲我與upstart有問題,因此需要使用環境因素。

產生的問題是在我的/etc/init/foo.conf

description "webserver test" 

start on runlevel [23] 
stop on shutdown 

pre-start script 
    exec >> /var/log/unicorn_test.log 2>&1 
    echo starting 
end script 

script 
    exec >> /var/log/unicorn_test.log 2>&1 

    /bin/bash /home/abdo/.rvm/bin/rvmsudo /home/abdo/sample_serv.sh 
    echo started 
end script 

當達到行/bin/bash /home/abdo/.rvm/bin/rvmsudo /home/abdo/sample_serv.sh,我得到

/home/abdo/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in 
`require': cannot load such file -- sinatra (LoadError) 

我能得到同樣的ruby -v爲我的用戶,但它看起來像GEM_PATH(即使我把它設置在upstart配置文件裏面)也沒有幫助。

基本上,如果我能夠了解如何(在哪裏 - gem env是沒有幫助,因爲gem不是命令,當我做sudorubygems查找被要求一個文件,我應該能夠繼續前進。

回答

1

當您在sudo下運行時,您在不同的環境下運行,其中gem未安裝,因此$PATH不同,因此可能無法順利運行。

你可能想嘗試this

更改須藤嚴格的違約

有緩解這種局面需要三樣東西,如果你遇到 它:

  • 用戶那是調用sudo必須在他的shell環境中設置export rvmsudo_secure_path=0(想想.bashrc, 的.bash_profile或.zshrc)
  • 評論的/ etc/sudoers文件進行Defaults secure_path=...
  • 在 則需要增加更多的變數極少數情況下添加Defaults env_keep +="rvm_bin_path GEM_HOME IRBRC MY_RUBY_HOME rvm_path rvm_prefix rvm_version GEM_PATH rvmsudo_secure_path RUBY_VERSION rvm_ruby_string rvm_delete_flag"/etc/sudoer秒 - 他們應該被 報告的rvmsudo第一次運行。

這些變化後,你應該能夠使用rvmsudo保留 相同的密碼/無密碼指令「正常」命令調用。

編輯

如果您不想更改默認設置,你可以嘗試上面(rvm_bin_path GEM_HOME IRBRC MY_RUBY_HOME rvm_path rvm_prefix rvm_version GEM_PATH rvmsudo_secure_path RUBY_VERSION rvm_ruby_string rvm_delete_flag)規定的環境值的值同步到root用戶。

如果這不起作用,您可以嘗試安裝rvm作爲root,並使用該環境(而不是/home/abdo/.rvm/bin/rvm)來運行您的代碼。

+0

這是一個好的開始......我不想改變sudo嚴格的默認值。感謝您的回覆:-) – Abdo

+0

添加了一些替代品 –

+0

非常感謝以上信息。 +1現在,將接受我確認時:-) – Abdo