Ruby版本升级至3.0.2后rails generate migration无响应问题求助
问题根因
该问题属于Spring 3.0.0与Ruby 3.0+的已知兼容缺陷。Spring 3.0.0的套接字通信逻辑未适配Ruby 3.x的IO处理规则,导致verify_server_version方法中执行server.gets.chomp读取服务端版本信息时出现永久IO阻塞,无返回结果。
可执行解决方案
- 优先升级Spring版本:Spring 3.1.0及以上版本已官方修复该兼容问题,修改Gemfile中spring的版本约束为
gem 'spring', '>= 3.1.0',执行bundle update spring即可,升级后无需额外调整配置,原有功能可正常运行。 - 临时禁用Spring绕过问题:如果暂时不希望修改依赖版本,执行生成迁移命令时添加前缀
DISABLE_SPRING=1 rails generate migration test_migration,或先执行spring stop终止当前运行的Spring后台进程后再执行生成命令,可直接绕过Spring的进程预加载逻辑。 - 手动打补丁(仅临时使用,不建议长期保留):若必须使用Spring 3.0.0版本,可找到本地spring gem安装路径下的
lib/spring/server.rb文件,将server_version = server.gets.chomp修改为server_version = server.gets&.chomp || "",增加空值判断避免阻塞,该修改会在下次升级spring gem时被覆盖。
验证步骤
- 操作完成后执行
spring status检查Spring服务运行状态 - 测试执行
rails generate migration test_migration确认命令可正常返回,生成迁移文件 - 执行
rails db:migrate验证迁移流程无异常,不影响原有业务功能
内容的提问来源于stack exchange,提问作者mohit chavda
相关产品推荐
相关产品推荐

