Rails Rails 中一个常量的奇葩问题

sail_lee · 2016年04月24日 · 最后由 sail_lee 回复于 2016年04月29日 · 2807 次阅读

各位先进,我在开发中遇到一个比较奇葩的问题:

问题描述: 在项目中需要指定一个全局使用的常量,如:

SYSTEM_ID = 3

这个常量的定义我放在了 config/environment.rb 文件的最后一行里面。 在开发环境下面,引用该常量值的 model 都能够正常工作。但是在生产 环境中,这个常量不起作用。

class Menu < ActiveRecord::Base
  scope :this_system, where(:app_id => SYSTEM_ID)
end

1、出现这种情况的原因是什么? 2、如果要引用一个全局使用的常量,最好如何定义?

本人比较菜,希望各位不吝赐教,谢谢!!!

建议放在 config/initializers/ 下面,初始化的时候 Rails 会自动加载。

放在 config/environment.rb 在生产环境可能不会被执行。

估计生产环境下 environment.rb 是延迟加载的。不在 eager_load_paths 路径中

关键词:autoload, eager_load, const_missing

谢谢各位,思前想后,最后还是在 config/application.rb 文件中的 MyApplication::Application.config 指定一个 system_id 来解决了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号