gpt4 book ai didi

ruby 脚本特定的 gemset backick

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:56 24 4
gpt4 key购买 nike

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

我试图通过将实际脚本与 sidekiq 调用分开来使工作尽可能可移植。

因此 sidekiq 会调用一个小的 stub 作业,它会调用实际的脚本并捕获输出。

那部分工作正常。但是 sidekiq 以 root 身份运行该作业,而不是以拥有所有 rvm 部件、rubies 和 gemsets 的环境的用户身份运行。我想使用现有用户 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`

...在调用的脚本中,shebang 的各种组合。

#!/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

但我正在尝试找到一种无需包装器即可完成此操作的方法。可能吗?

最佳答案

不,这是不可能的。

当您使用 "backtick" operator你实际上是在打电话 Kernel#system(...) .这意味着您执行的命令是在 子 shell 中运行的,它不能以您想要的方式更改父进程的环境。

请参阅此问题进行比较:How to run code after ruby Kernel.exec

还可以考虑阅读更多关于 UNIX process model 的信息.

关于ruby 脚本特定的 gemset backick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com