На одной машине у меня есть два проекта / сервера rails.
С одного сервера мне нужно выполнить задачу rake из другого проекта.Это означает переключение контекста и задачи rake для запуска в контексте контекста проекта rails.
Задача сначала загружает среду:
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
При выполнении из каталога проекта задача выполняется успешно, но из приведенного выше сценария выдает ошибку:
rake aborted!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: команда не найдена
Так что я думаю, что проблема связана сне смотрит на правильный гемфайл.