Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby脚本特定的gemset backick_Ruby_Linux_Rvm_Sidekiq_Gemset - Fatal编程技术网

ruby脚本特定的gemset backick

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

我们有一个rails sidekiq设置来运行作业

我试图通过将实际脚本与sidekiq调用分离,使作业尽可能具有可移植性

因此sidekiq调用一个小存根作业,backtick调用实际脚本并捕获输出

那部分很好用。但是sidekiq以root用户的身份运行该作业,而不是以拥有所有rvm部件、红宝石和宝石的用户的身份运行该作业。我想使用现有的用户rvm红宝石和宝石

在调用脚本sidekiq作业中:

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>,但在这种情况下,我不是试图改变子进程的环境吗?我想基本上复制或模仿从父母到孩子的环境。我可能没有把那部分讲清楚。即使我必须让子进程运行一些东西来手动加载环境,也没关系