ruby脚本特定的gemset backick
我们有一个rails sidekiq设置来运行作业 我试图通过将实际脚本与sidekiq调用分离,使作业尽可能具有可移植性 因此sidekiq调用一个小存根作业,backtick调用实际脚本并捕获输出 那部分很好用。但是sidekiq以root用户的身份运行该作业,而不是以拥有所有rvm部件、红宝石和宝石的用户的身份运行该作业。我想使用现有的用户rvm红宝石和宝石 在调用脚本sidekiq作业中:ruby脚本特定的gemset backick,ruby,linux,rvm,sidekiq,gemset,Ruby,Linux,Rvm,Sidekiq,Gemset,我们有一个rails sidekiq设置来运行作业 我试图通过将实际脚本与sidekiq调用分离,使作业尽可能具有可移植性 因此sidekiq调用一个小存根作业,backtick调用实际脚本并捕获输出 那部分很好用。但是sidekiq以root用户的身份运行该作业,而不是以拥有所有rvm部件、红宝石和宝石的用户的身份运行该作业。我想使用现有的用户rvm红宝石和宝石 在调用脚本sidekiq作业中: output = `source /path/to/dudes/rvm/environment.f
output = `source /path/to/dudes/rvm/environment.file && rvm use \
2.0.0-pxxx@default do ruby /path/to/actual/script.rb`
被调用的脚本可以运行,但是作为root用户,它显然不能像我预期的那样工作,因为找不到我的require
如果我使用相同的命令字符串,并以BASH本地用户的身份运行它,而BASH也没有gemset,那么它似乎可以工作
我试着用backtick把它称为shell脚本
output = `/path/to/actual/script.rb`
…在所谓的脚本中,各种各样的shebang组合
#!/usr/bin/env ruby
#!/usr/bin/env rvm use everything i found on the internets
现在,我使用bash脚本包装器使ruby脚本能够在具有linux upstart作业的环境中运行,如下所示:
但我正试图找到一种不用包装纸的方法。可能吗?不,不可能。
当您使用时,您实际上是在呼叫。这意味着您执行的命令是在子shell中运行的,该子shell不能以您想要的方式更改父进程的环境
请参见此问题以进行比较:
也考虑阅读更多关于./P>< P>,根据4.2.2点,您可以将用户作业设置为$HOME/init/.< /p>,但在这种情况下,我不是试图改变子进程的环境吗?我想基本上复制或模仿从父母到孩子的环境。我可能没有把那部分讲清楚。即使我必须让子进程运行一些东西来手动加载环境,也没关系