我使用的是Ubuntu 12.04.4 TLS
我用/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工作,因为我在使用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配置文件中设置了它)并没有帮助。
基本上,如果我能够理解rubygems如何查找所需的文件(以及在哪里-- gem env不起作用,因为当我执行sudo时,gem不是一个命令),那么我应该能够继续下一步。
发布于 2014-02-19 04:23:37
当你在sudo下运行时,你在一个不同的环境中运行,那里没有安装gem,$PATH是不同的,所以事情可能不会顺利地运行。
您可能想尝试一下this
更改sudo的严格缺省值
如果你遇到这种情况,需要3件事来缓解它:
对于正在调用sudo的用户,必须在其shell环境中设置export rvmsudo_secure_path=0 (考虑.bashrc、.bash_profile或/etc/sudoers
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"上的.zshrc)
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" to /etc/sudoers在极少数情况下需要添加更多变量-这些变量应在第一次运行sudo时报告在这些更改之后,您应该能够使用rvmsudo来保留与“普通”sudo调用相同的密码/无密码指令。
编辑
如果您不想更改默认值,可以尝试将上述环境值(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)来运行您的代码。
https://stackoverflow.com/questions/21863701
复制相似问题