在另一个项目中执行耙任务

时间:2019-09-20 11:30:54

标签: 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 = "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:找不到命令

所以我认为问题出在没有查看正确的gemfile。

1 个答案:

答案 0 :(得分:1)

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

Execute bash commands from a Rakefile