在另一个目录中运行rake任务

时间:2018-09-19 01:33:58

标签: ruby-on-rails macos

我有一个ruby on rails api_app和一个锻炼test_app的{​​{1}}。在开发模式下,我想从api_app运行api_app中的match:reset耙任务。我正在尝试使用test_app

中的ruby文件来执行此操作
api_app

执行此操作时出现以下错误

#!/usr/bin/env ruby
require 'tty-command'
cmd = TTY::Command.new
Dir.chdir('../test_app') do
   cmd.run 'run rake match:reset'
end

我尝试添加 Your Ruby version is 2.4.4, but your Gemfile specified 2.4.1 (Bundler::RubyVersionMismatch) ,但这不起作用。如何设置正确的环境以使其起作用?

2 个答案:

答案 0 :(得分:0)

根据我对脚本所做的更改,该解决方案未经测试。

require 'tty-command'
require 'rake'

cmd = TTY::Command.new
cmd.run("rvm use 2.4.1")
Dir.chdir("../test_app") do
  cmd.run(:rake, 'match:reset', env: {rails_env: :development})
end

答案 1 :(得分:0)

我无法将其与ruby命令文件一起使用。我认为这样做的原因是该文件在api_ppp目录中与ruby一起运行,因此您不能更改为另一个ruby。我最终要做的是使用bash文件:

#!/bin/bash
cd ../test_app
source $HOME/.rvm/scripts/rvm
rvm use 2.4.4@test_app_2.4.4
BUNDLE_GEMFILE=../test_lab/Gemfile bundle exec rake -f ../test_app/Rakefile match:reset

只要答案已经过测试,我很乐意考虑使用ruby命令文件的答案。