无法修改冻结的数组(TypeError)- config/application.rb:42:in `<<':

10 浏览
0 Comments

无法修改冻结的数组(TypeError)- config/application.rb:42:in `<<':

我有一个Rails 3应用程序,并且正在进行测试。我执行以下命令rspec spec/controllers/,并得到以下错误:

/config/application.rb:42:in `<<':无法修改冻结的数组(TypeError)
        from c:/Users/#####/documents/#####/config/application.rb:42

它指向我的config/application.rb文件,下面是我提供的内容。

require File.expand_path('../boot', __FILE__)
require 'rails/all'
# 如果有Gemfile,请在此处加载列出的gem,包括任何限制为:test、:development或:production的gem。
Bundler.require(:default, Rails.env) if defined?(Bundler)
module PadOnRails
  class Application < Rails::Application
    # config/environments/*中的设置优先于此处指定的设置。
    # 应用程序配置应放入config/initializers中的文件
    # -- 该目录中的所有.rb文件都会自动加载。
    # 自定义class和module的目录,您希望自动加载。
    # config.autoload_paths += %W(#{config.root}/extras)
    # 只按给定的顺序加载这里命名的插件(默认为按字母顺序)。
    # :all可用作所有未显式命名插件的占位符。
    # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
    # 激活应始终运行的观察者。
    # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
    # 将Time.zone默认设置为指定的区域,并使Active Record自动转换为此区域。
    # 运行“rake -D time”以获取查找时区名称的任务列表。默认为UTC。
    # config.time_zone = 'Central Time (US & Canada)'
    # 默认区域设置为:en,并且自动加载来自config/locales/*.rb,yml的所有翻译。
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    # config.i18n.default_locale = :de
    # JavaScript文件您希望作为:defaults(application.js始终包含)。
    # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
    # 配置用于Ruby 1.9模板的默认编码。
    config.encoding = "utf-8"
    # 配置从日志文件中过滤的敏感参数。
    config.filter_parameters += [:password]
    config.autoload_paths << "#{config.root}/lib"
  end
end

是否还有其他人遇到过这种确切的问题?如果是这样,您是如何解决的?因为我已经删除了我的项目并重新进行了git clone,但仍然遇到相同的错误。

0
0 Comments

问题的原因是尝试修改一个被冻结的数组。在config/application.rb文件的第42行,使用了`<<`操作符来向一个被冻结的数组中添加元素,这是不允许的,因此导致了TypeError错误的出现。

解决这个问题的方法是尝试使用评论中提到的方法:

config.autoload_paths += %W{#{config.root}/lib}

这个方法不会修改初始的数组,而是将给定的数组添加到config.autoload_paths中,并将它保存到一个新的数组中。

通过以上整理,我们可以得出以下结论: TypeError错误的出现是因为尝试修改一个被冻结的数组,解决这个问题的方法是使用+=操作符来向一个新的数组中添加元素。

0