簡體   English   中英

了解sudo與rvmsudo中的rubygems'require'

[英]Understanding rubygems 'require' in sudo vs rvmsudo

我正在使用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配置文件中)也GEM_PATH

基本上,如果我能理解rubygems (以及在什么地方gem env沒有幫助,因為當我執行sudogem不是命令), rubygems查找所需的文件,因此我應該能夠繼續前進。

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

您可能想嘗試一下

更改sudo的嚴格默認值

如果遇到這種情況,需要采取三件事來減輕這種情況:

  • 調用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 S IN罕見的情況下,要求增加更多的變數-他們應該通過的第一次運行報告rvmsudo

完成這些更改后,您應該能夠使用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用戶)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM