【问题标题】:NameError - uninitialized constant while running dev serverNameError - 运行开发服务器时未初始化的常量
【发布时间】:2016-01-19 11:16:23
【问题描述】:

在使用 foreman 或 rails 服务器运行 Sinatra 应用程序时,我无法使用放在 config/initializers/constants.rb 下的常量。

App 似乎没有看到他们向我扔这个:

 NameError - uninitialized constant UserJson::API_DATE_FORMAT:

我可以强制重新加载它们吗?

编辑: 这是失败的类:

require 'active_record'

    class UserJson

      attr_accessor :id, :active, :created_at, :updated_at, :name, :email

      def self.private_json(user)
        json = UserJson.new()
        json.id = user.id
        json.active = user.active
        json.email = user.email
        json.name = user.name
        json.updated_at = user.updated_at.strftime(API_DATE_FORMAT)
        json.created_at = user.created_at.strftime(API_DATE_FORMAT)
        json
      end

    end

它位于 app/models/user.rb 下。我在那里有更多的类,当尝试使用 API_DATE_FORMAT 读取文件中声明的常量之一时,每个类都失败了

【问题讨论】:

  • 你重启服务器了吗?
  • 每次更改后,我都会终止其进程并运行 foreman start 命令重新运行它
  • 你在哪里删除 API_DATE_FORMAT?
  • config/initializers/constants.rb

标签: ruby-on-rails ruby sinatra foreman


【解决方案1】:

当您在config 目录下更新/添加任何内容时,您应该重新启动服务器,因为更改不会自动加载到此文件夹中。

另一个原因可能是常量解析问题:

试试

json.created_at = user.created_at.strftime(::API_DATE_FORMAT)

编辑

您可以要求模型中包含常量的文件:

 require_relative 'config/initializers/constants'

但是由于您有多个模型在其中使用这些常量,因此我会尝试在全局范围内解决它。

将 require 添加到主应用程序文件将确保您不必在每个模型中都需要该文件,而只需一次:

# collector.rb (Sinatra input file)
require_relative 'config/initializers/constants'

【讨论】:

  • 我确实通过杀死服务器并使用工头启动命令重新启动来重新启动服务器
  • 请贴出你使用API_DATE_FORMAT常量的代码
  • 对不起,回答晚了,但这没有帮助
  • @JacekKwiecień 怎么来的?错误是什么?问题仍然存在吗?
  • 还是一样,问题在 json.updated_at = user.updated_at.strftime(::API_DATE_FORMAT) 行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2015-01-19
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多