有相对的舍邦线

问题描述 投票:0回答:3

我正在编写一个 Rails 应用程序,需要通过

./script/runner

运行脚本

虽然我可以放

#!/home/cannon/src/timetracker/script/runner 

在顶部,这在生产中不起作用,需要更像

#!/var/www/loclahost/htdocs/timetracker/script/runner -e=production

既然

./script
不在我的路径中,而且我也不希望如此,我怎样才能允许这样设置,

我正在使用 cron 作业在 Linux 机器上运行它

ruby-on-rails ruby scripting cron shebang
3个回答
9
投票

在 shebang 行中使用

env
在路径中查找内容:

#!/usr/bin/env ./script/runner

0
投票

在 (ruby) 脚本的顶部使用它在本地 ./script/runner 下重新执行它(然后应该定义 Rails,以便避免无限循环)

exec("./script/runner",$0,*ARGV) unless defined?(Rails)

(所以在顶部使用常规的“红宝石”shebang,无论是

#!/usr/bin/ruby
还是
#!/usr/bin/env ruby
或任何口味)


0
投票

现在 script/runner 已经消失,Rails 7 使用“rails runner”,在带有 env 的 shebang 行中使用它会出现问题,因为 env 不会解析空格并查找“rails runner”。

这是我发现的最优雅的解决方案:

#!/usr/bin/env ruby

if not defined?(Rails) then
  exec('bin/rails', 'runner', __FILE__, *ARGV)
end

... Rails code ...

来自https://github.com/rails/rails/issues/665

© www.soinside.com 2019 - 2024. All rights reserved.