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

4

这种情况在我多次使用Rails控制台进行#update或#destroy操作时发生过,希望能在这里找到答案。

有时候当我在控制台上执行一个对象的#update或#destroy操作时,我的控制台会在日志中显示“BEGIN”后简单地冻结。目前我有一个简单的destroy操作还在那里等了十分钟。

例如:

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” 可能会导致其关闭吗? - MMachinegun
也许可以发布一下你的更新和删除操作的代码?有什么地方导致了冻结吗? - Ren
你在开发过程中使用任何 SQL 客户端吗?有些客户端在更新/删除查询时使用事务。除非你关闭客户端,否则事务不会完成。如果你尝试在 Rails 控制台上运行更新/销毁查询,同时从 SQL 客户端运行查询,则控制台会冻结。 - Girish
2个回答

0

最近我遇到了这个问题,当我发现原因时,我感到相当惭愧。

确保你没有代码中断。有一个单独的binding.pry,即使我试图从控制台中删除对象,它也会出现某些原因。


这在我的情况下不是问题,但为了让其他人看到,我会点赞。如果再次发生这种情况,我会保持开放状态,但记录显示自从我升级到Rails 5以来,我没有重复遇到这个问题。 - Nick Schwaderer

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接