1

У меня есть файл конфигурации/Инициализаторы/secrets.rb, содержащий следующее:Rails конфигурационные переменные не во время инициализации

Rails.configuration.smtp_domain = "derp.com" 
Rails.configuration.smtp_password = "derpderp" 
Rails.configuration.smtp_user = "[email protected]" 
Rails.configuration.smtp_address = "derp.derp.com" 

В моей конфигурации/сред/development.rb У меня есть следующее:

config.action_mailer.smtp_settings = { 
    :address    => Rails.configuration.smtp_address, 
    :port     => 587, 
    :domain    => Rails.configuration.smtp_domain, 
    :user_name   => Rails.configuration.smtp_user,       
    :password    => Rails.configuration.smtp_password, 
    :authentication  => 'login',             
    :enable_starttls_auto => true              
} 

Теперь, когда я bundle exec rails c я получаю эту ошибку:

`method_missing': undefined method `smtp_address' for #<Rails::Application::Configuration:0x007f8c4505b238> (NoMethodError) 

Однако если я закомментируйте Smtp конфигурации вне, то в консоли я могу это сделать:

Loading development environment (Rails 3.2.1) 
irb(main):001:0> Rails.configuration.smtp_address 
=> "derp.derp.com" 

Я не могу комментировать это в производство, хотя! Любая помощь будет очень признательна, спасибо!

+0

Действительно ли это путь к файлу config/initializers.secret.rb, а не 'config/initializers/secret.rb'? – pjammer

+0

Упс! Это была опечатка, файл находится в нужном месте. Благодаря! – Blastula

ответ

0
  1. что-то здесь, возможно, этот файл находится в каталоге инициализаторов правильно?
  2. Вы можете изменить свой материал Rails.configuration.... и изменить его вместо констант. например, SMTP_DOMAIN = 'derp.com' т.д.

Просто интересно, если это работает первый, то вы можете увидеть WTF происходит с Rails.configuration.... вещи. Если бы это было TDD, мы бы сказали, давайте получим зеленый цвет. Я не видел, что Rails.configuration используется так же лично, но кто знает, может быть, это вещь.

+0

Мне нравится ваша аналогия с TDD! К сожалению, это дало мне «неинициализированный постоянный SMTP_ADDRESS (NameError). Этот стиль« Rails.configuration »работает для загрузки загружаемых env-переменных в файл' schedule.rb' с каждым драгоценным камнем. Однако в этих файлах среды есть что-то другое, что не нравится этому подходу. – Blastula

+0

Хорошо, теперь попробуйте ':: SMTP_DOMAIN' (или как вы его назовете) и посмотрите, работает ли это. просто чтобы пошутить. – pjammer

+0

На самом деле я получаю ту же ошибку из моего предыдущего комментария. Сообщение об ошибке не отображает двойную двоеточие, но я объявил ее таким образом в файле development.rb, как вы предложили. Спасибо за помощь! – Blastula

0

Никогда не видел этого, но если я добавлю require_relative 'initializers/secrets' в начало своего environment.rb, он работает так, как я ожидал.

Это меня озадачивает, так как это есть в инициализаторе, который, как я понял, уже должен быть загружен.

Если кто-нибудь может объяснить, почему я буду принимать ваш ответ по своему усмотрению. Благодарю.

+0

Я бы сказал, что вы можете принять свой собственный ответ. ;) – henrebotha

Смежные вопросы