Windows下执行rails new myapp创建Rails应用时get_hosts_path报错问题
get_hosts_path未定义错误 在Windows系统中执行rails new myapp生成Rails应用,或是运行rails importmap:install等Rails命令时,可能会触发如下错误:
NoMethodError: undefined method `get_hosts_path' for module Win32::Resolv
(NoMethodError)
DefaultFileName = Win32::Resolv.get_hosts_path || IO::NULL
^^^^^^^^^^^^^^^ internal:C:/tools/ruby33/lib/ruby/site_ruby/3.3.0/rubygems/core_ext/kernel_require.rb:37:in `require'
该错误源于Ruby 3.3版本在Windows环境下的兼容性问题:Win32::Resolv模块移除了原本的get_hosts_path方法,但Rails相关组件仍在调用该方法。
修复方案
临时修复:手动补充缺失方法
找到Ruby安装目录下的win32/resolv.rb文件(示例路径:C:/tools/ruby33/lib/ruby/site_ruby/3.3.0/win32/resolv.rb),打开后在模块内添加以下代码:module Win32 module Resolv def self.get_hosts_path File.join(ENV['SystemRoot'], 'System32', 'drivers', 'etc', 'hosts') end end end保存文件后重新执行Rails命令即可。
长期解决方案:降级Ruby版本
若不想修改Ruby核心文件,可将Ruby版本降级至3.2.x系列(该版本的Win32::Resolv模块仍保留get_hosts_path方法),再重新创建或运行Rails应用。
内容的提问来源于stack exchange,提问作者Richard_G

