我们如何 运行 一个应用程序的 rake 任务通过另一个应用程序(都 运行 在同一台服务器上)?

How can we run a rake task of one application through another application (both running on the same server)?

问题: 我在同一台服务器上有两个应用程序 A 和 B 运行ning。我在文件系统中有一个脚本

cd /data/B/
bundle exec rake -T 

当我 运行 脚本通过应用程序 A 的 rails 控制台时,它会出错,因为控制台会加载 A 的 gem 并且 rake 任务失败

  eg: system("sh ~/test.sh")

rake aborted!
LoadError: cannot load such file -- log4r
/home/kumolus/api/config/application.rb:9:in `require'
/home/kumolus/api/config/application.rb:9:in `<top (required)>'
/home/kumolus/api/Rakefile:1:in `require'
/home/kumolus/api/Rakefile:1:in `<top (required)>'
(See full trace by running task with --trace)

当我通过 unix 命令行 运行 脚本时(不管我的密码如何)它都有效

cd ~
sh test.sh  #works

cd /data/A   #my application A's dir
sh ~/test.sh   #also works

我需要它来完成 rails.Any 帮助吗?谢谢!

我认为 cd 到文件夹应该足以在执行 cd 的 shell 进程中切换环境 。试试这个。

进入项目 B 并执行

which bundle

在命令行中,将结果复制到某处。 然后做

which rake

并复制结果。

然后,切换到项目 A 并启动 rails 控制台。然后试试这个:

`cd /path/to/projectB; bundle exec rake  -T`

如果这不起作用,试试这个:

`cd /path/to/projectB; <result of doing "which bundle" earlier> exec rake -T`

如果还是不行,试试这个:

`cd /path/to/projectB; <result of doing "which bundle" earlier> exec <result of doing "which rake" earlier> -T`

感谢大家的帮助, 由于捆绑程序的默认行为,我找到了解决方案。

我对块使用了 with_clean_env 方法,它被执行了。

感谢团队 干杯