Rails 控制台冻结手动删除/销毁操作

Posted

技术标签:

【中文标题】Rails 控制台冻结手动删除/销毁操作【英文标题】:Rails Console Freezes on manual delete/destroy action 【发布时间】:2016-11-21 03:13:44 【问题描述】:

这在我身上发生过很多次,我希望我能在这里找到答案。

有时在使用 Rails 控制台并对对象执行 #update 或 #destroy 操作时,我的控制台会在日志中发布“BEGIN”后冻结。我目前有一个开放的,简单的破坏,已经在那里坐了十分钟。

即:

my_object.find(permitted_params[:thing][:id]).destroy

我的 mac 上的 CTRL+C 不会杀死它,只是渲染:

^C^C^C^C^C^C^C^C^C^C

然后当我最终杀死选项卡并重新启动服务器时,我得到:

A server is already running. Check /path/to/app/tmp/pids/server.pid.

然后当我清除 server.pid 并尝试重新启动服务器时,我得到:

/Users/nickschwaderer/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/socket.rb:206:in `bind': Address already in use - bind(2) for 127.0.0.1:3000 (Errno::EADDRINUSE)

此时我运行lsof -wni tcp:3000,然后运行kill -9 #whatever_my_pid_was,最终将所有内容设置为重新运行服务器。

这里到底发生了什么?

【问题讨论】:

^D 可能会杀死它吗? 也许从您的更新中发布代码并销毁操作?有什么东西导致冻结 您在开发时使用任何 sql 客户端吗?一些客户端使用事务进行更新/删除查询。直到您关闭客户端,事务才完成。如果您在从 sql 客户端运行查询时尝试从 rails 控制台对同一张表运行更新/销毁查询,控制台会冻结。 【参考方案1】:

这件事最近发生在我身上,我承认当我发现这个原因时我感到很惭愧。

确保您的代码没有在某处停止。即使我试图从控制台中删除我的对象,也有一个单独的 binding.pry 因某种原因被触发。

【讨论】:

这不是我的问题,但如果其他人有这个问题,请支持可见性。我将把它打开,以防它再次发生在我身上,但为了记录,自从我的 Rails 5 升级以来,我没有重复过这种情况。【参考方案2】:

这发生在我身上,但发生在 User.delete(1234) 身上。最后,我只是重新启动了我的机器,重新启动了数据库服务器,一切正常。

【讨论】:

以上是关于Rails 控制台冻结手动删除/销毁操作的主要内容,如果未能解决你的问题,请参考以下文章

控制台应用程序在删除目录时冻结且没有错误[关闭]

等价于 Node.js 的 Rails 控制台

Rails - 模型不通过方法保存属性,但如果手动分配(在控制台中)

无法使用 Ruby on rails 删除表中的项目

Rails 架构未随迁移而更新

无法在 Rails 中使用 Devise 销毁会话 [重复]