我正在尝试从 cron 运行 Ruby 脚本。
该脚本使用 Bundler 来管理 gem 依赖项。由于 cron 没有运行,$PWD
我每次都从 Bundler 收到“无法找到 Gemfile”错误,这是有道理的,因为从 cron 运行时 Gemfile 不在当前路径中。
有没有办法告诉 Bundler 使用不在当前路径中的 Gemfile?
最好的办法是cd
进入您的 cron 中的相关目录。您还可以使用BUNDLE_GEMFILE
环境变量指向 Gemfile。如果您有任何问题,请告诉我们BUNDLE_GEMFILE
。
您可以让主脚本更改其目录:
Dir.chdir File.dirname(__FILE__)
您可能需要对其进行调整File.expand_path
以获取应用程序的根目录(在哪里Gemfile
)。假设您的脚本是/apps/myapp/bin/main.rb
;该chdir
行将是:
Dir.chdir File.expand_path('../..', __FILE__)
当然,您必须确保您的应用程序不会因为 chdir 而中断 - 但如果您cd
在 cron 中运行,则不应该这样做。
如果脚本是守护进程,并且您希望/
在正常操作期间将其更改为根目录,则可以在调用Bundler.setup
or之后执行此操作Bundler.require
。
虽然您可以cd
在 cron 中执行此操作,但我不想这样做,因为 cron 已经很难阅读和维护。