在同一台机器上,我有两个 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。