Запустите `rails db:migrate` с помощью capistrano в геме/подмодуле

У меня есть приложение для рельсов 5.2. Я пытаюсь развернуть его с помощью Capistrano.

Приложение имеет подмодуль зависимостей gem, который содержит все модели и миграции, необходимые для этого проекта. Этот подмодуль зависит от других драгоценных камней в нем .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]

Похоже, что набор драгоценных камней (содержащий все родительские драгоценные камни и подмодули), используемый при развертывании родительского проекта, отсутствует в пути или недоступен, когда приходит время запуска этой задачи.

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

Я не совсем понимаю, как Capistrano работает под капотом, как я могу убедиться, что эти драгоценные камни доступны для этой задачи, когда она работает?

Все драгоценные камни, которые я использовал, просто копируют миграции в папку проекта db/migrate. Ваш драгоценный камень изготовлен по индивидуальному заказу? Однако ошибка не связана с миграциями, она говорит, что не может найти aasm-5.0.2, войдите на свой сервер и запустите установку пакета в корне вашего проекта и убедитесь, что он успешно завершился.

arieljuod 09.04.2019 04:01

@arieljuod да, это специальный драгоценный камень, и да, он может успешно их связать, но не во время этой задачи.

Gerard Simpson 09.04.2019 06:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
158
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я разобрался, мне нужно было 3 вещи:

1.execute :bundle до execute :rake, :"db:migrate"

  1. Укажите второй аргумент within "#{release_path}/PATH/TO/SUBMODULE", чтобы сделать это within "#{release_path}/PATH/TO/SUBMODULE", release_path - не удалось найти документы по этому вопросу, только этот PR: https://github.com/capistrano/bundler/pull/84

  2. секреты символической ссылки на движок, чтобы он не мешал запуску каких-либо задач:

    task :symlink_secrets do
        on roles(:app) do
          execute "rm -rf #{release_path}/PATH/TO/SUBMODULE/spec/dummy/config/secrets.yml"
          execute "ln -nfs ~/secrets.yml #{release_path}/PATH/TO/SUBMODULE/spec/dummy/config/secrets.yml"
        end 
    end

Другие вопросы по теме