Как узнать, где находится Gemfile - PullRequest
26 голосов
/ 30 июля 2010

Я пытаюсь запустить скрипт Ruby из cron.

Скрипт использует Bundler для управления гем-зависимостями.Поскольку cron не запускается в $PWD, я получаю ошибку «Не удалось найти Gemfile» от Bundler каждый раз, что имеет смысл, поскольку Gemfile не находится в текущем пути при запуске из cron.

Есть ли способсказать Bundler использовать Gemfile вне текущего пути?

Ответы [ 2 ]

41 голосов
/ 30 июля 2010

Лучше всего было бы cd в каталог, о котором идет речь в вашем cron.Вы также можете использовать переменную окружения BUNDLE_GEMFILE, чтобы указать Gemfile.Пожалуйста, сообщите нам , если у вас возникли проблемы с BUNDLE_GEMFILE.

2 голосов
/ 05 апреля 2013

Вы можете сделать так, чтобы основной скрипт изменил свой каталог:

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 или Bundler.require.

Хотя вы можете сделать cd в cron, я предпочитаю этого не делать, потому что cron уже достаточно сложен для чтения и обслуживания.

...