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