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

Ruby on rails 我们如何通过另一个应用程序(都在同一台服务器上运行)来运行一个应用程序的rake任务?,ruby-on-rails,ruby,gem,bundler,Ruby On Rails,Ruby,Gem,Bundler,问题: 我有两个应用程序A和B都运行在同一台服务器上。我在文件系统中有一个脚本 cd /data/B/ bundle exec rake -T 当我通过应用程序A的rails控制台运行脚本时,它会出错,因为控制台加载了A的gems,而rake任务失败 eg: system("sh ~/test.sh") rake aborted! LoadError: cannot load such file -- log4r /home/kumolus/api/config/application

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

cd /data/B/
bundle exec rake -T 
当我通过应用程序A的rails控制台运行脚本时,它会出错,因为控制台加载了A的gems,而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)

我需要它通过轨道。有什么帮助吗?谢谢

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

进入项目B并执行

which bundle
在命令行中,并将结果复制到某个位置。 那就做吧

并复制结果

然后,切换到项目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`
如果不起作用,请尝试以下方法:

`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`
`cd/path/to/projectB;执行rake-T`
如果仍然不起作用,请尝试以下方法:

`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`
`cd/path/to/projectB;执行官-T`
谢谢大家的帮助, 我找到了一个解决方案,这是由于捆绑机的默认行为

我使用带有一个块的\u clean\u env方法,它被执行

谢谢团队
干杯

您正在使用RVM吗?项目是否有不同的环境,例如不同的Gemset/ruby版本?不,我们正在管理应用程序,尽管Bundle两个应用程序都在同一环境中,但它们通过Bundle使用不同的gems。当您在命令行上执行时,它可以工作,您是否在应用程序A的项目文件夹中?它可以从任何位置工作,如果我给出脚本的绝对路径,以及如果我在项目A中,脚本的相对路径也不起作用,我会得到与log4r相同的错误,因为它在应用程序B中使用,但在应用程序A中没有。我相信通过A加载控制台会加载其所有库,因此,脚本没有对log4r gem进行加载编辑,以包含指向文档的链接,在找到问题的答案后,我必须查找这些文档。