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之前