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 控制台冻结手动删除/销毁操作的主要内容,如果未能解决你的问题,请参考以下文章