【问题标题】:Where should I place my middleware file for Rails 5.1?我应该将 Rails 5.1 的中间件文件放在哪里?
【发布时间】:2017-06-21 23:56:31
【问题描述】:

以前我的中间件放在 lib/middleware/my_middle_ware.rb 下

但是,当这样做时,

config.middleware.use MyMiddleWare

我收到一个

NameError: uninitialized constant

rails 在哪里寻找中间件?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-5 ruby-on-rails-5.1


    【解决方案1】:

    看起来 rails 不是在寻找它。

    我必须执行以下操作才能使其正常工作。

    Dir["./lib/middleware/*.rb"].each do |file|
      require file
    end
    

    【讨论】:

    • 这也是我使用的修复程序,但似乎框架应该加载这些。也许这是一个错误?
    • @JayP。我同意。这是一个错误吗?我在 Rails 5.2 上,这正在发生。很惊讶middleware 没有标准的自动加载目录,就像modelscontrollersviewsmailers 等一样。
    • 作为记录,我对此进行了深入研究,这是与 Rails 核心成员关于中间件应该去哪里以及如何需要它的相关讨论:github.com/rails/rails/issues/25525#issuecomment-479941866。简而言之,“中间件不能在应用程序中,因为它们无法重新加载。它们应该在 lib 中,如果你将它们放在 lib 中,require_relative 将起作用。”
    【解决方案2】:

    创建一个文件夹app/middlewares 并在此文件夹中创建您的中间件文件。

    但不幸的是,即使我添加到Rails v5.2.2 中的加载路径,app/middlewares 文件夹也没有加载

    config.autoload_paths << "#{Rails.root}/app/middlewares"
    config.eager_load_paths << "#{Rails.root}/app/middlewares"
    

    所以你可以像下面这样显式使用require,在application.rb中加入这一行

    require_relative '../app/middlewares/my_middleware'
    

    并加载中间件:

    config.middleware.use MyMiddleware
    

    并调用rake middleware 以查看中间件堆栈。

    【讨论】:

      【解决方案3】:

      我相信您想将中间件添加到您的 config/application.rbconfig/environments 文件中。

      config.middleware.use MyMiddleWare
      

      这应该可以工作并将MyMiddleWare 附加到中间件堆栈的底部。

      【讨论】:

        【解决方案4】:

        如果调用“config.middleware.use”,即使在加载应用程序/中间件内容之前,我认为您会收到“未初始化的常量错误”。以下应该修复

        config.middleware.use "MyMiddleWare"
        

        如果上述方法不起作用,则以下其中一项可能是否。

        Is MyMiddleWare in app/middleware/my_middle_ware.rb ?
        
        Is MyMiddleWare in lib/my_middle_ware.rb ?
        

        【讨论】:

        【解决方案5】:

        config/application.rb 中的中间件作为字符串替换为 config/environment/{environment} 作为常量解决了我的问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-01
          • 2018-09-28
          • 2019-10-04
          • 1970-01-01
          • 2013-09-22
          • 2015-08-21
          • 2016-05-23
          相关资源
          最近更新 更多