【问题标题】:How do I run Rails/Rake from another directory?如何从另一个目录运行 Rails/Rake?
【发布时间】:2015-02-27 04:11:21
【问题描述】:

如果不 cd-ing 进入我的 Rails 应用程序的根目录,我如何为该应用程序执行 Rails 或 Rake 命令。

我试过了:

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

在其他组合中,无济于事。

[更新]

问题实际上是双重的,bundle 不知道 gemfile 在哪里,而 rake 不知道要运行什么。

使用捆绑器:

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

请注意,BUNDLE_GEMFILE 必须位于 'bundle exec' 之前。

使用 Rake:

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

使用 Rails 控制台:

????

还没有弄清楚如何从另一个目录进入 Rails 控制台。看source,我觉得可能不太可能,因为它最终会通过 File.join('script','rails') 来启动 rails 进程。

【问题讨论】:

  • several good answers here 但我认为最好的答案可能是你不应该这样做:-)。尽管可能,您最终会发现调用 rake 时引用的每条路径,甚至在被调用的 rake 任务中都会感到困惑,因为它们希望锚定到任务运行所在的目录。
  • 好点,汤姆。正如比尔所说,这些任务必须与 CWD 无关。对于小任务,这应该不是问题。谢谢!

标签: ruby ruby-on-rails-3.1 rake bundler


【解决方案1】:

如果您不显示收到的错误消息,我假设它与 Bundler 的关系比与 Rake 的关系要小。当运行 rake 命令时,它会从当前目录开始搜索 Rakefile 并向上遍历树,直到找到。您可以通过在 rake 命令的选项中明确指定 Rakefile 来覆盖此行为。这是使用-f <RAKEFILE> 选项完成的。

例如。

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

请记住,您的 Rake 任务必须与“CWD 无关”。大多数任务和脚本都倾向于根据相对于目录树中已知文件的路径来获取项目目录。您可能已经明白这一点,但值得一提的是,如果任务期望当前工作目录实际上是 rails 根目录。在这种情况下,从项目外部运行它们可能会很危险。

【讨论】:

  • 感谢这个问题对我来说实际上是双重的:bundle 找不到 gemfile,并且 rake 没有正确的上下文。您的回答修复了耙子部分,谢谢!我将编辑我的答案以反映结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 2014-05-06
  • 1970-01-01
  • 2011-09-22
  • 2019-06-14
  • 2015-07-27
  • 1970-01-01
相关资源
最近更新 更多