2014-12-31 1 views
9

Без использования cd-in в корневом каталоге приложения Rails, как я могу выполнить команду Rails или Rake для этого приложения.Как запустить Rails/Rake из другого каталога?

Я пробовал:

bundle exec rake my_tasks:do_stuff BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile 

среди других комбинаций, но безрезультатно.

[Update]

Проблема на самом деле два раза, расслоение не знает, где Gemfile есть и грабли не знает, что бежать.

Чтобы использовать Bundler:

BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile bundle exec ... 

Обратите внимание, что BUNDLE_GEMFILE должен идти перед 'расслоения Exec'.

Чтобы использовать Rake:

rake -f /PATH/TO/RAILS_APP/Rakefile my_task:do_stuff 

Для использования Rails консоли:

???? 

еще предстоит выяснить, как войти в консоль Rails из другого каталога. Если посмотреть на source, я думаю, что это может быть невозможно, потому что в конечном итоге File.join ('script', 'rails') запускает процесс рельсов.

+0

Здесь [несколько хороших ответов] (http://stackoverflow.com/questions/1206545/run-rake-task-from-outside-rails-root), но я думаю, что лучший ответ, скорее всего, t делаю это :-). Возможно, вы обнаружите, что каждый единственный путь, на который делается ссылка в вызове rake, то даже внутри вызываемых задач rake все путают, потому что они ожидают привязки к каталогу, из которого запускается задача. –

+0

Хорошо, Том. Как говорит Билл, задачи должны быть несовместимыми с CWD. Для небольших задач это не должно быть проблемой. Благодаря! – Nejuf

ответ

10

Если вы не указали сообщение об ошибке, которое вы получаете, я предполагаю, что он имеет меньшее отношение к Bundler, чем к Rake. Когда команда rake запускается, она ищет Rakefile, начинающийся в текущем каталоге и проходящий по дереву до его обнаружения. Вы можете переопределить это поведение, явно указав Rakefile в параметрах команды rake. Это делается с использованием опции -f <RAKEFILE>.

например.

bundle exec rake -f /PATH/TO/RAILS_APP/Rakefile -T 

Имейте в виду, что ваши задачи Rake должны быть «CnD agnostic». Большинство задач и сценариев таковы, что они, как правило, получают каталог проекта на основе пути относительно известного файла в дереве каталогов. Вы, наверное, уже это понимаете, но стоит упомянуть, если задачи ожидают, что текущий рабочий каталог фактически станет корневым рельсом. Это будет случай, когда запуск их из-за пределов проекта потенциально может быть опасным.

+0

Спасибо, что проблема была для меня вдвойне: пакет не смог найти gemfile, а грабли не имели правильного контекста. Ваш ответ исправил грабли, спасибо! Я отредактирую свой ответ, чтобы отразить результаты. – Nejuf