инструкции if для сред разработки и производства

#ruby-on-rails #ruby-on-rails-4

#ruby-on-rails #ruby-on-rails-4

Вопрос:

Я создаю приложение Rails 4, используя Apartment Gem, и я застрял на том, как приступить к определению моего хоста почтовой программы.. Это была часть обучающей серии, которая была просто остановлена после нескольких эпизодов..

Большая проблема сейчас заключается в том, что все это работает в режиме разработки, однако, когда я нажимаю на Heroku, создаю учетную запись, отправляется электронное письмо с подтверждением, однако, когда я перехожу к его подтверждению, подтверждение перенаправляет меня обратно на мой локальный хост (lvh.me: 3000), и производственное приложение не получает обновление подтверждения.

У меня есть следующее в моем контроллере приложений:

   def set_mailer_host
    subdomain = current_account ? "#{current_account.subdomain}." : ""
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
  end
 

Я хотел бы добавить if else следующее утверждение:

   def set_mailer_host
   if environment == development
    subdomain = current_account ? "#{current_account.subdomain}." : ""
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
   else
    subdomain = current_account ? "#{current_account.subdomain}"
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}patrolvault.co"
  end
 

Я просто не могу понять это, или мне следует использовать другой подход к этому?

Ответ №1:

Вы можете размещать условия на основе среды Rails с помощью этих:

 Rails.env.production?

Rails.env.development?

Rails.env.test?
 

Итак, в вашем коде,

 def set_mailer_host
   if Rails.env.development?
    subdomain = current_account ? "#{current_account.subdomain}." : ""
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
   else
    subdomain = current_account ? "#{current_account.subdomain}"
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}patrolvault.co"
   end
end
 

О да, и, похоже, вы забыли end в своем if-else блоке

Ответ №2:

Вы можете использовать Rails.env.production? методы, описанные в сообщении Рена, но файл конфигурации imho для каждой среды — гораздо лучшее место.

Взгляните на раздел «Настройка приложений Rails» официального руководства. Вы можете использовать разные конфигурации для каждой среды, поместив соответствующий код в config/environments/[environment name].rb файл. Например, если вы хотите установить host для параметров URL по умолчанию в рабочей среде, вы можете поместить следующий код в конец config/environments/production.rb файла (непосредственно перед последней end инструкцией):

 config.action_mailer.default_url_options = { host: ENV.fetch("DOMAIN") }
 

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