警告:已经在 config/routes.rb 中初始化了常量

Posted

技术标签:

【中文标题】警告:已经在 config/routes.rb 中初始化了常量【英文标题】:warning: already initialized constant within 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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于警告:已经在 config/routes.rb 中初始化了常量的主要内容,如果未能解决你的问题,请参考以下文章

(Starter。坚持这一点)生成了Rails项目:缺少config / routes.rb文件

:就像在rails routes.rb中一样

从 Rails 6 中删除 ActiveStorage 路由

Rails引擎:命名空间多态URL

在 Rails 控制台会话中识别路线

设计自定义路由和登录页面