【问题标题】:warning: already initialized constant within config/routes.rb警告:已经在 config/routes.rb 中初始化了常量
【发布时间】:2019-05-23 19:24:00
【问题描述】:

我在config/routes.rb 中有以下课程。当我通过 Elastic Beanstalk 使用 .ebextensions 文件部署应用程序时,该文件包含用于启动 delayed_job 的部署后脚本,我收到:

...
warning: already initialized constant DistributionSlugConstraint::MATCH_REGEX
warning: previous definition of MATCH_REGEX was here
delayed_job: running [pid 14867]
...

config/routes.rb 内的类。

class DistributionSlugConstraint
  MATCH_REGEX = /B[a-zA-Z1-9_]{5}/
  def self.matches?(request)
    request.fullpath =~ MATCH_REGEX
  end
end

Rails.application.routes.draw do

  constraints(DistributionSlugConstraint) do
    get "/:slug" => "distributions#show", as: :distribution
  end

end

【问题讨论】:

    标签: ruby-on-rails delayed-job amazon-elastic-beanstalk ebextensions


    【解决方案1】:

    可能发生此错误的原因有很多,但解决方法是不声明该常量。不确定您是否在代码中的其他地方使用DistributionSlug::MATCH_REGEX,但如果不是,您可以这样做:

    class DistributionSlugConstraint
      def self.matches?(request)
        request.fullpath =~ /B[a-zA-Z1-9_]{5}/
      end
    end
    

    如果您在代码的其他地方使用它,您可以将其设为类方法并调用它而不是常量。另一条路线可能是将其声明为application.rb中的配置

    当使用像puma 这样的多线程应用服务器或在Sidekiq 作业中时,我已经看到了这种情况。如果不了解您的基础架构,很难说更多。

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2011-08-29
      • 2012-10-08
      • 2011-11-29
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      相关资源
      最近更新 更多