26

我正在尝试从 cron 运行 Ruby 脚本。

该脚本使用 Bundler 来管理 gem 依赖项。由于 cron 没有运行,$PWD我每次都从 Bundler 收到“无法找到 Gemfile”错误,这是有道理的,因为从 cron 运行时 Gemfile 不在当前路径中。

有没有办法告诉 Bundler 使用不在当前路径中的 Gemfile?

4

2 回答 2

41

最好的办法是cd进入您的 cron 中的相关目录。您还可以使用BUNDLE_GEMFILE环境变量指向 Gemfile。如果您有任何问题,请告诉我们BUNDLE_GEMFILE

于 2010-07-30T15:32:20.853 回答
2

您可以让主脚本更改其目录:

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.setupor之后执行此操作Bundler.require

虽然您可以cd在 cron 中执行此操作,但我不想这样做,因为 cron 已经很难阅读和维护。

于 2013-04-05T18:17:40.490 回答