使用Rails 5.1.4无法使'rake db:drop'在开发中工作

时间:2017-09-27 15:13:09

标签: ruby-on-rails ruby postgresql ruby-on-rails-5 pg


自从我从Rails 4.2升级到Rails 5.1.4后,我再也无法进行db:drop了 每当我尝试运行任务时,都会收到以下错误消息:

PG::ObjectInUse: ERROR:  database "myapp_development" is being 
accessed by other users
DETAIL:  There is 1 other session using the database.
: DROP DATABASE IF EXISTS "myapp_development"
Couldn't drop database 'myapp_development'
rails aborted!
ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR:  database 
"myapp_development" is being accessed by other users
DETAIL:  There is 1 other session using the database.
: DROP DATABASE IF EXISTS "myapp_development"

我过去常常使用这个黑客:
Rails + Postgres drop error: database is being accessed by other users

现在,当我将此解决方案集成到我的应用程序中时,我收到另一条错误消息:

FATAL:  terminating connection due to administrator command
server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
Couldn't drop database 'myapp_development'
rails aborted!
PG::AdminShutdown: FATAL:  terminating connection due to 
administrator command
server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

你们有解决这个问题的方法吗? 顺便说一下,我正在运行Postgres 9.6,ruby 2.4.2和Rails 5.1.4。

4 个答案:

答案 0 :(得分:0)

为什么?

数据库" myapp_development"正在被其他用户访问

如果您的数据库在控制台中打开,即 rails c rails s 或任何其他模式,您将收到此错误。

<强>解决方案

1.在您打开rails c的任何地方关闭控制台,或者在运行

时停止服务器

2.如果您无法找到控制台或服务器正在运行,即如果所有内容仍然关闭,您将收到错误消息。然后尝试使用以下命令

关闭运行过程
ps -au

此命令将显示所有正在运行的进程。只需找到关键字rails c / localhost / postgres。您也可以使用grep命令过滤进程

ps -au | grep 'rails c'

使用以下命令

终止进程

kill -9 PID_NUMBER //运行ps -au时,您将在第二列中找到PID NUMBER。

答案 1 :(得分:0)

要删除数据库,任何应用程序都不应访问您的数据库。

此错误告诉

 1.您正在使用使用数据库OR,
的rails控制台  2.你正在使用一些工具工具postico,pgadmin,mysql workbench     访问数据库或
 3.你正在使用像rubymine和访问的IDE     数据库通过它或
 4.有sidekiq或任何其他背景工作     访问它的服务器运行。

<强>解决方案
在删除数据库之前要注意以下事项 退出所有rails控制台,
关闭数据库工具,如mysql workbench,pgadmin
IDE中关闭数据库选项卡 停止sidekiq或任何其他后台工作

答案 2 :(得分:0)

您可以尝试重新启动数据库, 对于postgres

  

sudo service postgresql restart

然后试试 rails db:drop / rake db:drop,也许它会起作用

答案 3 :(得分:0)

这意味着数据库正由尝试删除表的用户以外的用户使用。尝试删除表的用户是config/database.yml

中指定的用户

要了解这是怎么回事,请执行:

za:myapp za$ cat config/database.yml | grep username
  #username: myapp
  # The password associated with the postgres role (username).
  username: myapp

在尝试删除数据库时,请确保没有其他用户连接到数据库。就我而言,另一个用户&#34; za&#34;已连接到数据库。我杀死了该用户的会话,一切顺利。

za:myapp za$ rails db:drop
Dropped database 'myapp_development'
Dropped database 'myapp_test'

重新开始工作,创建然后迁移:

za:myapp za$ rake db:create
za:myapp za$ rake db:migrate
RubyDep: WARNING: (To disable warnings, see:http://github.com/e2/ruby_dep/wiki/Disabling-warnings )
== 20180218181904 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0286s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0183s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0036s
== 20180218181904 DeviseCreateUsers: migrated (0.0507s) =======================