Выполнить грабли в другом проекте - PullRequest
0 голосов
/ 20 сентября 2019

На одной машине у меня есть два проекта / сервера 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: команда не найдена

Так что я думаю, что проблема связана сне смотрит на правильный гемфайл.

1 Ответ

1 голос
/ 20 сентября 2019

Извините, мне не разрешено оставлять комментарии.Я думаю, что вы хотите создать сценарии для настройки вашей среды, а затем вызвать задачу rake.

Выполнение команд bash из файла Rakefile

...