微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LoadError: 无法加载此类文件 -- 升级后运行任何 rails 命令时出现 zip/zip

如何解决LoadError: 无法加载此类文件 -- 升级后运行任何 rails 命令时出现 zip/zip

我刚刚升级到 rails 6,在运行 rails app:update

时我得到以下信息
rails aborted!
LoadError: cannot load such file -- zip/zip
/home/ben/code/app/config/application.rb:7:in `<top (required)>'
/home/ben/code/app/Rakefile:5:in `<top (required)>'
bin/rails:4:in `<main>'
(See full trace by running task with --trace)

我已经更新了所有的 gem,它正在捆绑和更新 gem,gemfile.lock 看起来也不错。

这是回溯:

Error:[rake --tasks] rake aborted!
LoadError: cannot load such file -- zip/zip
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:89:in `register'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:44:in `require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/activesupport-6.1.3.2/lib/active_support/dependencies.rb:332:in `block in require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/activesupport-6.1.3.2/lib/active_support/dependencies.rb:299:in `load_dependency'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/activesupport-6.1.3.2/lib/active_support/dependencies.rb:332:in `require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/axlsx-1.3.6/lib/axlsx.rb:26:in `<top (required)>'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-2.2.19/lib/bundler/runtime.rb:66:in `block (2 levels) in require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-2.2.19/lib/bundler/runtime.rb:61:in `each'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-2.2.19/lib/bundler/runtime.rb:61:in `block in require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-2.2.19/lib/bundler/runtime.rb:50:in `each'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-2.2.19/lib/bundler/runtime.rb:50:in `require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-2.2.19/lib/bundler.rb:174:in `require'
/home/ben/code/app/config/application.rb:7:in `<top (required)>'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/home/ben/code/BusinessCloudEssential/Rakefile:5:in `<top (required)>'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/rake_module.rb:29:in `load_rakefile'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/application.rb:703:in `raw_load_rakefile'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/application.rb:104:in `block in load_rakefile'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/application.rb:186:in `standard_exception_handling'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/application.rb:103:in `load_rakefile'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/application.rb:82:in `block in run'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/application.rb:186:in `standard_exception_handling'
/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/rake-13.0.3/lib/rake/application.rb:80:in `run'
/home/ben/code/app/bin/rake:4:in `<main>'

这是应用程序.rb

require_relative 'boot'

require 'rails/all'

# Require the gems listed in Gemfile,including any gems
# you've limited to :test,:development,or :production.
Bundler.require(*Rails.groups)
require 'net/http'
require 'csv'

module RailsUpgrade
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.0

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.

    config.time_zone = 'London'
    #WARNING: This changes the way times are stored in the database (not recommended)
    config.active_record.default_timezone = :local

    config.log_level = :debug
    config.enable_dependency_loading = true
    config.eager_load_paths << Rails.root.join('lib')

    config.assets.enabled = true
    config.assets.version = '1.0'

    config.filter_parameters << :password
    config.filter_parameters << :password_confirmation
    config.filter_parameters << :card_number
    config.filter_parameters += [:password,:password_confirmation,:card_number]

    # config.middleware.use 'CatchJsonParseErrors'
  end
end

上次运行 rails app:update 是在今天早些时候更新到 Rails 5.2 时。所以不确定是什么问题。

谢谢。

解决方法

您使用的是 axlsx 版本 1.3.6,其中包括 this line: require 'zip/zip'。这就是您的错误消息所指向的内容:

/home/ben/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/axlsx-1.3.6/lib/axlsx.rb:26:in `<top (required)>'

但是,我怀疑您不经意地将 rubyzip gem 升级到 v1.0.0+ - API 已更改,您现在只需要 {{1 }},( require 'zip').

有一些解决方案,例如在 the project READMEthis similar StackOverflow question 中提到的:

  1. require 'zip/zip' 降级回 rubyzip
  2. 升级v0.x
  3. axlsx 添加到您的 gem 'zip-zip'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。