如何告诉bundler Gemfile在哪里?

时间:2010-07-30 14:09:12

标签: ruby bundler

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

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

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

2 个答案:

答案 0 :(得分:41)

最好的办法是将cd放入您的cron中的相关目录中。您还可以使用BUNDLE_GEMFILE环境变量指向Gemfile。如果您对BUNDLE_GEMFILE有任何问题,请let us know

答案 1 :(得分: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.setupBundler.require后执行此操作。

虽然你可以在cron中做cd,但我不愿意,因为crons已经足够难以阅读和维护。