首页 > 解决方案 > 在 Capistrano 运行期间 Rails db:migrate 命令失败

问题描述

我已经使用 Capistrano 设置服务器并且一切正常,但我注意到它没有运行迁移,所以我添加了 asrequired 'capistrano/migrations'现在它正在执行但它一直失败我已经设置了环境变量,而且我过去也这样做了我从来不需要执行此附加步骤。但是在 Capistrano 3.16 中,我遇到了这个问题。这是我在 rails 6 项目中使用的 gem。

  gem 'capistrano', '~> 3.16'
  gem 'capistrano-bundler', '~> 2.0'
  gem 'capistrano-rails', '~> 1.6'
  gem 'capistrano-chruby', '~> 0.1.2'

我的 Capfile

require 'capistrano/setup'

require 'capistrano/deploy'
require 'capistrano/chruby'
require 'capistrano/bundler'
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git

require 'capistrano/rails/migrations' # I added to migration run
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

我的 config/deploy.rb 文件

lock '~> 3.16.0'
set :application, 'warehouse'
set :repo_url, 'git@github.com:kamalpanhwar/warehouse.git'
set :passenger_restart_with_touch, true
set :deploy_to, '/home/deploy/warehouse'

append :linked_files, 'config/master.key'
append :linked_files, 'config/credentials.yml.enc'
append :linked_files, 'config/database.yml'
set :chruby_ruby, 'ruby-2.7.2'

after "deploy", "deploy:migrate"

以下是我的 production.rb 文件

set :stage, :production
set :rails_env, :production
set :branch, 'production'
set :migration_role, :app
set :user, "deploy"

server 'dwh.actionplanner.com', user: 'deploy', roles: %w{app db web}

它给了我以下错误

 01 /usr/local/bin/chruby-exec ruby-2.7.2 -- bundle exec rake db:migrate
      01 rake aborted!
      01 ActiveRecord::ConnectionNotEstablished: fe_sendauth: no password supplied

但是当我使用命令在生产上运行迁移时,当我添加 ENV_RAILS=production 时它工作正常,我还添加了该环境变量。如果我像这样运行上面的错误命令

/usr/local/bin/chruby-exec ruby-2.7.2 -- bundle exec rake db:migrate RAILS_ENV=production

它工作正常,任何建议为什么会发生这种情况,因为上次我用 RVM 进行了很少的部署并且它工作得很好,但是这个我得到了这个错误。我在这里使用 chruby 不确定是不是因为它。但似乎错误与 RAILS_ENV 有关,但我已经在部署配置中设置环境。

标签: ruby-on-railscapistranorails-migrations

解决方案


推荐阅读