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

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

在本地测试都很正常,开始部署输入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.

共收到 4 条回复

可以把数据库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
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册