【问题标题】:Use constant declared in Initializer in Environment.rb使用在 Environment.rb 的 Initializer 中声明的常量
【发布时间】:2012-10-02 03:06:09
【问题描述】:

基本上我想要做的是将我的电子邮件用户名和密码保存在我的环境中的单独文件中。我已经在其他地方使用了初始化程序来执行此操作 - 但这里似乎首先加载了环境:

development.rb

config.action_mailer.smtp_settings = {
    :address => "smtp.example.com",
    :port => 587,
    :domain => "www.example.com",
    :authentication => "plain",
    :user_name => SMTP_USERNAME,
    :password => SMTP_PASSWORD,
    :enable_starttls_auto => true
 }

当我启动我的 Rails 服务器时出现错误:

uncaught exception: uninitialized constant SMTP_USERNAME

由于 Initializers 中的常量是在环境之后声明的,这是否是一个范围界定问题,我该怎么办?

【问题讨论】:

    标签: ruby-on-rails constants


    【解决方案1】:

    如果您尝试在application.rb 中定义常量,在class Application < Rails::Application 中会怎样?然后,您可以通过执行Application::SMTP_USERNAME 之类的操作来访问常量。这只是一个猜测。

    【讨论】:

    • 我将它们放在单独的文件中的原因是我不希望将用户名和密码提交到我的 git 存储库。
    • 明白了。在您告诉 Git 忽略的单独配置文件中定义这些常量是否有意义,然后将该文件包含在 application.rb 中(因为 environment.rb 似乎没有做到这一点)?
    • 确实,如果我在 environment.rb 中加载初始化程序文件,它可以工作,但我的生产服务器在 Heroku 上,我将使用环境变量,所以我真的不想强制加载.但是,谢谢现在这个工作!
    • 你的意思是你不想在生产中加载单独的配置文件吗?您总是可以将包含在 if Rails.env != 'production' 中。不过我可能会误会。
    • 我在启动服务器时也收到警告“警告:已初始化常量 SMTP_USERNAME”,我猜这意味着初始化程序文件是在环境设置后编译的。我不可能是第一个不想在我的环境中包含密码的人。rb?!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多