У меня есть приложение rails 5.2.Я пытаюсь развернуть его с помощью Capistrano.
В приложении есть подмодуль зависимости от гемов, который содержит все модели и миграции, необходимые для этого проекта.Этот подмодуль зависит от других гемов в его .gemspec
.
. Поэтому мне нужно запустить rails db:migrate
в корне подмодуля, а не в корне родительского проекта.
Я добавил следующеена deploy.rb
:
desc 'Runs rake db:migrate if migrations are set'
task :migrate => [:set_rails_env] do
on primary fetch(:migration_role) do
within "#{release_path}/PATH/TO/SUBMODULE" do
with rails_env: fetch(:rails_env) do
execute :rake, "db:migrate"
end
end
end
end
before :starting, :migrate
Gemfile:
gem 'dependency', path: 'PATH/TO/SUBMODULE'
gem 'capistrano-git-with-submodules', '~> 2.0'
group :development do
gem 'capistrano', require: false
gem 'capistrano-rvm', require: false
gem 'capistrano-rails', require: false
gem 'capistrano-bundler', require: false
gem 'capistrano3-puma', require: false
end
Когда я пытаюсь запустить эту задачу, я получаю сообщение об ошибке:
DEBUG [b4c1cf18] [31mCould not find aasm-5.0.2 in any of the sources[0m
DEBUG [b4c1cf18]
DEBUG [b4c1cf18] [33mRun `bundle install` to install missing gems.[0m
DEBUG [b4c1cf18]
Itпохоже, что набор гемов (содержащий все гемы родительского и субмодульного), используемый при развертывании родительского проекта, находится не в пути или недоступен, когда наступает время для выполнения этой задачи.
Я могу запустить родительский проектбез миграций, поэтому я знаю, что родительский проект загружает весь правильный набор гемов во время выполнения.Только не во время этой задачи.
Я не совсем уверен, как Capistrano работает под капотом, как я могу убедиться, что эти драгоценные камни доступны для этой задачи, когда она выполняется?