自从我从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。
答案 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
然后试试 rails db:drop / rake db:drop,也许它会起作用sudo service postgresql restart
答案 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) =======================