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

Ruby on rails 在另一个目录中运行rake任务,ruby-on-rails,macos,Ruby On Rails,Macos,我有一个rubyonrailsapi\u应用程序,还有一个test\u应用程序,用于练习api\u应用程序。在我想要运行的开发模式下,从api\u应用程序运行一个名为match:reset的rake任务,该任务位于test\u应用程序中。我试图用api\u应用程序中的ruby文件来实现这一点 #!/usr/bin/env ruby require 'tty-command' cmd = TTY::Command.new Dir.chdir('../test_app') do cmd.run

我有一个
rubyonrails
api\u应用程序
,还有一个
test\u应用程序
,用于练习
api\u应用程序
。在我想要运行的开发模式下,从
api\u应用程序
运行一个名为
match:reset
的rake任务,该任务位于
test\u应用程序
中。我试图用
api\u应用程序中的ruby文件来实现这一点

#!/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)

我已尝试添加
cmd.run“rvm use 2.4.1”
,但这不起作用。如何设置正确的环境以使其正常工作?

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

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

我无法使用ruby命令文件实现此功能。我认为这样做的原因是,该文件是从
api\u 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命令文件的答案,只要答案已经过测试。

rvm use 2.4.1
无法说出
/Users/Chris/.rvm/gems/ruby-2.4。4@api-app_2.4.4/bin“不是第一位的
,当rake tast运行时,它会声明
/Users/Chris/.rvm/gems/ruby-2.4。4@api_app_2.4.4/gems/bundler-1.16.2/lib/bundler/definition.rb:491:in'validate_ruby!':你的Ruby版本是2.4.4,但是你的Gemfile指定了2.4.1(Bundler::RubyVersionMismatch)
,所以在我看来,我运行的是正确的rake文件,但是使用api应用程序中的Ruby我认为问题在于路径。在
cmd.run(“rvm use 2.4.1”)
之前,您是否可以运行此
[[-s“$HOME/.rvm/scripts/rvm”]]和&source“$HOME/.rvm/scripts/rvm”
”,或者如果路径不起作用,您也可以尝试
rvm重置
。我运行了
ls=`[-s“$HOME/.rvm/scripts/rvm”]]和&source“$HOME/.rvm/scripts/rvm”]
在执行rvm命令之前,ls的值为“-”?在执行
rvm use 2.4.1
之前,我也尝试了
rvm reset
,它给出了相同的错误。好的,您可以试着运行这个吗<代码>系统(“source$HOME/.rvm/scripts/rvm”)在rvm使用2.4.1之前