如果没有进入我的Rails应用程序的根目录,如何为该应用程序执行Rails或Rake命令。
我试过了:
bundle exec rake my_tasks:do_stuff BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile
在其他组合中,无济于事。
[更新]
问题实际上是双重的,捆绑包不知道gemfile在哪里,rake不知道要运行什么。
使用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')来启动rails进程。
答案 0 :(得分:15)
如果没有你显示你得到的错误信息,我认为它与Bundler的关系不如Rake。运行rake命令时,它会搜索从当前目录开始并遍历树的Rakefile,直到找到它为止。您可以通过在rake命令的选项中显式指定Rakefile来覆盖此行为。这是使用-f <RAKEFILE>
选项完成的。
例如
bundle exec rake -f /PATH/TO/RAILS_APP/Rakefile my_task:do_stuff
请记住,您的Rake任务必须是“CWD不可知”。大多数任务和脚本都是基于相对于目录树中的已知文件的路径来获取项目目录。您可能已经理解了这一点,但值得一提的是,如果任务期望当前工作目录实际上是rails root。从项目外部运行它们可能会有危险。