ruby 有一条相对舍邦线

ycl3bljg  于 5个月前  发布在  Ruby
关注(0)|答案(3)|浏览(44)

我正在编写一个Rails应用程序,需要通过./script/runner运行来脚本
虽然我可以把

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

字符串
在顶部,这在生产中行不通,因为它需要更像

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


由于./script不在我路径中,而且我也不希望它在我的路径中,我如何允许设置它,
我使用cron作业在Linux机器上运行它

toiithl6

toiithl61#

在shebang行中使用env来查找路径中的内容:

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

字符串

yb3bgrhw

yb3bgrhw2#

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

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

字符串
(So在顶部使用常规的'ruby' shebang,无论是#!/usr/bin/ruby还是#!/usr/bin/env ruby或其他任何风格)

4szc88ey

4szc88ey3#

现在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

相关问题