#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") }
Обратите внимание, что этот фрагмент содержит другой подход. Вы можете поместить домен в переменные среды и использовать тот же код в общем файле конфигурации. Это даже лучше, поскольку у вас не будет никаких жестко закодированных значений и повторяющегося кода.