如何从另一个目录运行Rails/Rake?

Nej*_*juf 10 ruby rake bundler ruby-on-rails-3.1

如果没有进入我的Rails应用程序的根目录,我该如何为该应用程序执行Rails或Rake命令.

我试过了:

bundle exec rake my_tasks:do_stuff BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile
Run Code Online (Sandbox Code Playgroud)

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

[更新]

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

要使用Bundler:

BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile bundle exec ...
Run Code Online (Sandbox Code Playgroud)

请注意,BUNDLE_GEMFILE必须在'bundle exec'之前.

使用Rake:

rake -f /PATH/TO/RAILS_APP/Rakefile my_task:do_stuff
Run Code Online (Sandbox Code Playgroud)

要使用Rails控制台:

????
Run Code Online (Sandbox Code Playgroud)

还没有弄清楚如何从另一个目录进入Rails控制台.查看源代码,我认为这可能是不可能的,因为它最终会执行File.join('script','rails')来启动rails进程.

Bil*_*hty 16

如果没有你显示你得到的错误信息,我认为它与Bundler的关系不如Rake.运行rake命令时,它会搜索从当前目录开始并遍历树的Rakefile,直到找到它为止.您可以通过在rake命令的选项中显式指定Rakefile来覆盖此行为.这是使用-f <RAKEFILE>选项完成的.

例如.

bundle exec rake -f /PATH/TO/RAILS_APP/Rakefile my_task:do_stuff
Run Code Online (Sandbox Code Playgroud)

请记住,您的Rake任务必须是"CWD不可知".大多数任务和脚本都是基于相对于目录树中的已知文件的路径来获取项目目录.您可能已经理解了这一点,但值得一提的是,如果任务期望当前工作目录实际上是rails root.那将是从项目外部运行它们可能是危险的情况.