首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Capistrano帽生产部署在迁移中失败,但是cap产部署:

问Capistrano帽生产部署在迁移中失败,但是cap产部署:
EN

Stack Overflow用户
提问于 2016-11-10 07:19:16
回答 1查看 783关注 0票数 0

当生产服务器准备就绪时,我遇到了一个关于Capistrano的奇怪问题。当我运行cap production deploy时,它总是在部署上失败:

ActiveRecord::AdapterNotSpecified:“production”数据库未配置。提供:["defaul…“

然而,当我运行cap production deploy:migrate时,Capistrano成功地完成了。

在实际的服务器上,我也能够运行RAILS_ENV=production bundle exec rake:migrate而没有任何问题。

Capistrano日志对这两种日志都发出相同的命令:

部署:迁移运行rake db:migrate

我的数据库配置如下所示:

代码语言:javascript
复制
production:
  adapter: mysql2
  encoding: utf8
  database: foo
  host: localhost
  pool: 5
  timeout: 5000
  username: bar
  password: password
  socket: /opt/bitnami/mysql/tmp/mysql.sock

我还应该指出,我已经在deploy.rb中设置了rails env,如下所示:set :rails_env, :production

以下是我的宝石文件中的相关信息:

代码语言:javascript
复制
gem 'mysql2', '~> 0.4.5'
group :development do
  gem 'capistrano', '~> 3.6', '>= 3.6.1'
  gem 'capistrano-rvm'
  gem 'capistrano-bundler'
  gem 'capistrano-rails'
  gem 'capistrano-passenger'
end

有人能解释一下我在这里错过了什么吗?我是新来的卡斯特拉诺。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 06:39:40

经过大量的搜索,我找到了根本原因。

我没有意识到“当前”目录(或者说是公平的符号链接)是在Capistrano进程结束时创建的,而且由于我之前使用RAKE_ENV=development进行了一次试运行,所以服务器上已经有了当前的符号链接。

在部署:迁移步骤之前,我通过使用以下命令的自定义任务将我的database.yml从安全位置上传到服务器:

代码语言:javascript
复制
upload! "#{SECURE_DATA}database.yml", "#{current_path}/config/"

在部署之前:迁移时,我以为rake db:migrate是从当前的符号链接运行的,但实际上它是从最新的发布目录运行的。最新版本目录没有生产数据库信息,因为文件被上传到指向旧版本的当前符号链接。

总之,我的自定义任务导致了这个问题,如果有其他人遇到类似的情况,则使用以下命令:

代码语言:javascript
复制
upload! "#{SECURE_DATA}database.yml", "#{release_path}/config/"

键是release_path变量而不是current_path变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40521932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档