簡體   English   中英

在gem / submodule中使用capistrano運行`rails db:migrate`

[英]Run `rails db:migrate` with capistrano in a gem/submodule

我有一個rails 5.2 app。 我正在嘗試使用Capistrano進行部署。

該應用程序有一個gem依賴子模塊,其中包含此項目所需的所有模型和遷移。 這個子模塊取決於它的.gemspec其他寶石。

因此,我需要在子模塊根目錄中運行rails db:migrate ,而不是父項目根目錄。

我在deploy.rb添加了以下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]

在部署父項目時使用的gem集(包含所有父模塊和子模塊gems)似乎不在路徑中,或者在運行此任務時不可用。

我可以在沒有遷移的情況下運行父項目,因此我知道父項目正在運行時加載所有正確的gem集。 只是沒有在這個任務期間。

我不太確定Capistrano是如何工作的,我怎么能確保這些寶石在運行時可用於此任務?

我想通了,我需要3件事:

1. execute :bundle execute :rake, :"db:migrate" 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM