我们有一个 rails sidekiq 设置来运行作业。
我试图通过将实际脚本与 sidekiq 调用分开来使工作尽可能便携。
因此,sidekiq 调用了一个小存根作业,该作业反引号调用实际脚本并捕获输出。
那部分工作正常。但是 sidekiq 以 root 身份运行该作业,而不是以拥有所有 rvm 部件、rubies 和 gemset 的环境的用户身份运行。我想使用现有的用户 rvm rubies 和 gemsets。
在调用脚本(sidekiq 作业)中:
output = `source /path/to/dudes/rvm/environment.file && rvm use \
2.0.0-pxxx@default do ruby /path/to/actual/script.rb`
并且被调用的脚本得到运行,但是作为 root 并且它显然不能按我的预期工作,因为我的要求没有找到。
如果我采用相同的命令字符串并以 BASH 的本地用户身份运行它,该用户也没有 gemsets,它似乎可以工作。
我试过像shell脚本一样调用它
output = `/path/to/actual/script.rb`
...在被调用的脚本中,shebangs 的各种组合。
#!/usr/bin/env ruby
#!/usr/bin/env rvm use everything i found on the internets
现在,我已经使用 bash 脚本包装器让 ruby 脚本在 linux upstart 作业的环境中运行,如下所示: http ://techhelplist.com/index.php/tech-tutorials/43-linux-adventures/85-upstart- ruby-job-with-rvm
但我正在尝试找到一种无需包装器的方法。可能吗?