部署 cap production deploy 自动化部署报错数据表格已经存在,该如何解?!

tankzhuchen · 2019年04月08日 · 最后由 tankzhuchen 回复于 2019年04月09日 · 5905 次阅读

在本地测试都很正常,开始部署输入cap production deploy报错

Caused by:
SSHKit::Command::Failed: rake exit status: 1
rake stdout: == 20190408023032 AddImageToPost: migrating ===================================
-- add_column(:posts, :image, :string)
rake stderr: rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "image" of relation "posts" already exists
: ALTER TABLE "posts" ADD "image" character varying

我删除了报错的 migrate,上传成功,但是功能丧失。

我在网上寻找了答案,需要rake db:droprake db:createrake db:migrate,但是我这是远端的重复表格,所以我登录远端切换到 deploy 账户

执行cd ~/项目数据库名称/current切换到 current,输入RAILS_ENV=production bundle exec rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1报错 ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database "rails_recipes" is being accessed by other users DETAIL: There is 1 other session using the database.

可以把数据库 schema_migrations 表的数据与你 migration 的版本做一下比较,看看数据库现在是哪个版本。

其次,确认是否有其他人也使用了这个库,并创建了相关字段。

最后,RAILS_ENV=production bundle exec rake db:drop会将所有生产环境数据清除,确定要这么做的话,可以根据如下 SQL(注意替换 database_name)

SELECT 
    *, pg_terminate_backend(pid) 
FROM 
    pg_stat_activity 
WHERE 
    pid <> pg_backend_pid()
    AND datname = 'database_name'
    ;

查出当前 pg 数据库的连接,手动 kill 相关 pid,即可 db drop。

新手,表示看不懂呀

RAILS_ENV=production bundle exec rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 报错

尝试停掉 web 进程再试一下。

已经解决,cap 部署时遇到的远程 pg 数据库重复问题

1、首先登陆到远端 root 账户,输入su - postgres 是这样显示的

2、我尝试dropdb 数据库名称去删除数据库,报错正在被其他用户访问

dropdb: database removal failed: ERROR:  database "rails_recipes" is being accessed by other users
DETAIL:  There is 1 other session using the database.

3、输入psql使用 psql 登陆数据库,输入select pg_terminate_backend(pid) from pg_stat_activity where DATNAME = '数据库名称';不知道在哪里谷歌到的,反正删掉了所有链接😅 然后换了数据库的命令行删除数据库DROP DATABASE 数据库名称; 搞定退出

然后新建新的数据库,继续 cap 自动部署,部署成功。

tankzhuchen 关闭了讨论。 04月09日 11:06
tankzhuchen 重新开启了讨论。 04月09日 11:07
tankzhuchen 关闭了讨论。 04月09日 11:07
tankzhuchen 重新开启了讨论。 04月09日 14:50
需要 登录 后方可回复, 如果你还没有账号请 注册新账号