boot.rb 中的 Rails bootsnap/eventmachine 模块 Win32::Resolv 的 NoMethodError get_hosts_path

问题描述 投票:0回答:1

在 config/boot.rb 中在 Windows 下运行 Rails: 需要“bootsnap/setup”

结果

ruby33/lib/ruby/3.3.0/gems/eventmachine-1.2.7/lib/em/resolver.rb:14:in 模块的

<class:Resolver>': undefined method 
get_hosts_path' Win32::解决(无方法错误)

ruby-on-rails windows boot eventmachine bootsnap
1个回答
0
投票

要解决此特定问题,请在 bootsnap 之前将以下代码添加到 config/boot.rb 中:

if Gem.win_platform?
  require 'win32/resolv'
end

此要求确保 Win32::Resolv 模块和 get_hosts_path 方法在 Bootsnap 中引用时可供 EventMachine 使用。

根据 Bootsnap 实现的 config/boot.rb 示例,其中包括 BootLib,如 Bootsnap 及其对 BootLib 的引用(这里假设 BootLib 模块存在于 lib/core_ext/ 中,并包括 Bumbler, YMMV):

require 'rubygems'
require_relative '../lib/core_ext/boot_lib'
if Gem.win_platform?
  require 'win32/resolv'
end
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
ENV['BUNDLER_LOAD_BUMBLER_ON_STARTUP'] = 'true'
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
# require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
BootLib::Require.from_gem('bootsnap', 'bootsnap')
env = ENV['RAILS_ENV'] || "development"
Bootsnap.setup(
  cache_dir: 'tmp/cache', # Path to your cache
  ignore_directories: ['node_modules'], # Directory names to skip.
  development_mode: env == 'development', # Current working environment, e.g. RACK_ENV, RAILS_ENV, etc
  load_path_cache: true, # Optimize the LOAD_PATH with a cache
  compile_cache_iseq: true, # Compile Ruby code into ISeq cache, breaks coverage reporting.
  compile_cache_yaml: true, # Compile YAML into a cache
  compile_cache_json: true, # Compile JSON into a cache
  readonly: true, # Use the caches but don't update them on miss or stale entries.
)
© www.soinside.com 2019 - 2024. All rights reserved.