Ruby on rails 在另一个项目中执行rake任务

Ruby on rails 在另一个项目中执行rake任务,ruby-on-rails,ruby,rake,popen3,Ruby On Rails,Ruby,Rake,Popen3,在同一台机器上,我有两个rails项目/服务器 我需要从一台服务器执行另一个项目的rake任务。这意味着切换上下文和要在其rails项目上下文中运行的rake任务 该任务首先加载环境: task update: :environment do ..... 应该运行此任务的代码如下所示: require 'open3' module Tasks def self.test env_vars = {"RAILS_ENV"=>"development"} cmd = "bu

在同一台机器上,我有两个rails项目/服务器

我需要从一台服务器执行另一个项目的rake任务。这意味着切换上下文和要在其rails项目上下文中运行的rake任务

该任务首先加载环境:

task update: :environment do .....
应该运行此任务的代码如下所示:

require 'open3'
module Tasks
  def self.test
    env_vars = {"RAILS_ENV"=>"development"}
    cmd = "bundle exec rake store:update"
    puts "#{cmd}".light_blue
    opts = {:chdir => '/home/master/git/frontend'}
    begin
      stdout_str, error_str, status = Open3.capture3(env_vars, cmd, opts)
    rescue => exception
      puts "Command failed:"
      puts "#{exception}".red      
    end
    puts "#{stdout_str}".green
    if status.success?
      puts "ok".light_green
      puts "#{status.inspect}".yellow
    else
      puts "Command finished with error:"
      puts "#{error_str}".light_red
    end
  end
end
从项目目录执行时,任务会成功运行,但从上面的脚本会抛出错误:

雷克流产了! LoadError:无法加载这样的文件--rails/all /home/csrhub/git/csrhub frontend/config/application.rb:3:in>'require'

当然,application.rb中有这样一行:

require 'rails/all'
但是有什么区别呢?从bash工作,从脚本不

正如您所见,我使用的是
open3
——在这种情况下应该是最好的

我认为这与上下文有关。当我将命令
cmd=“bundle exec rake store:update”
替换为
“rails-v”
,我得到以下错误:

rbenv:rails:未找到命令


因此,我认为问题在于没有查看正确的GEM文件。

对不起,我不允许留下评论。我认为您需要创建脚本来设置环境,然后调用rake任务


< /P>您是否考虑在普通Ruby类中实现逻辑而不是RAKE任务,并用触发器添加方法调用第二个应用程序的路由?我认为您应该使用API来在2个项目之间进行通信。我不想从RAKE文件执行BASH命令。我正在尝试在rails_项目_2/lib/tasks/中执行rake文件。。。来自rails_项目_1/model/file.rb