我正在编写一个 Rails 应用程序,需要通过
./script/runner
运行脚本
虽然我可以放
#!/home/cannon/src/timetracker/script/runner
在顶部,这在生产中不起作用,需要更像
#!/var/www/loclahost/htdocs/timetracker/script/runner -e=production
既然
./script
不在我的路径中,而且我也不希望如此,我怎样才能允许这样设置,
我正在使用 cron 作业在 Linux 机器上运行它
在 (ruby) 脚本的顶部使用它在本地 ./script/runner 下重新执行它(然后应该定义 Rails,以便避免无限循环)
exec("./script/runner",$0,*ARGV) unless defined?(Rails)
(所以在顶部使用常规的“红宝石”shebang,无论是
#!/usr/bin/ruby
还是#!/usr/bin/env ruby
或任何口味)
现在 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 ...