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

Я создаю приложение Rails 4, используя «Жемчужину квартиры», и я зациклился на том, как продолжить определение моего почтового сервера. Это было частью серии учебников, которая была просто остановлена ??после нескольких эпизодов.

Большая проблема заключается в том, что все это работает в режиме разработки, однако, когда я нажимаю на Heroku, создаю учетную запись, отправляется подтверждение электронной почты, однако, когда я иду подтвердить это, подтверждение перенаправляет меня обратно на мой localhost (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

Я просто не могу понять это, или если я должен принять еще один подход к этому?

ruby-on-rails,ruby-on-rails-4,

0

Ответов: 2


4 принят

Вы можете размещать условия, основанные на среде 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блоке


3

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

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

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

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

рубин-на-рельсы, рубин-на-рельсы-4,