Rails & Devise: как настроить почту с доменным именем автоматически? - PullRequest
5 голосов
/ 30 января 2012

Мне нужен совет по настройке почты на рабочих сайтах Ruby-on-Rails.

Я развернул приложение Rails на EngineYard. У меня есть несколько сайтов, например demo.mydomain.com или staging.mydomain.com - как я могу настроить Devise, чтобы во время развертывания я мог убедиться, что письма с подтверждением приходят с demo.mydomain.com или staging.mydomain.com автоматически? т.е. , я хочу такую ​​же кодовую базу GitHub и хочу заполнить конфигурацию динамически.

В настоящее время в config/environments/production.rb У меня есть строка:

config.action_mailer.default_url_options = { :host => 'demo.mydomain.com' }

Но это неверно, когда один и тот же код развернут в staging.mydomain.com, так как они оба запускаются в RAILS_ENV=production

Есть идеи?

Спасибо, Dave

Обновление: На данный момент, чтобы быть практичным, я добавил определенные среды для жесткого кодирования домена почтовой программы. Так что теперь demo.mydomain.com работает на environments/demo.rb, а www.mydomain.com работает на environments/productions.rb. Что мне не нравится в этом, так это дублирование между файлами, мне не ясно, как их высушить, как у меня, например, , database.yml

Ответы [ 3 ]

4 голосов
/ 30 января 2012

в конфигурации вашего устройства, обычно config/initializers/devise.rb вы можете настроить отправителя почты для устройства. эта конфигурация требует процедуры, чтобы можно было что-то оценить во время выполнения.

Devise.setup do |config|
  config.mailer_sender = Proc.new { your_magic_here }
end
1 голос
/ 19 октября 2013

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

Затем попробуйте что-нибудь подобное в конфигурации вашего устройства:

Devise.setup do |config|
  if Rails.env.production?
    config.mailer_sender = "no-reply@domain.com"
  elsif Rails.env.staging?
    config.mailer_sender = "no-reply@staging.domain.com"
  else
    config.mailer_sender = "no-reply@domain.com"
  end
  ...

Проверьте это руководство , чтобы узнать больше об объекте Proc.

1 голос
/ 31 января 2012

В идеале промежуточные и производственные серверы должны работать в разных средах рельсов. Тем не менее, если вы хотите, чтобы производственная среда работала как на промежуточных, так и на производственных серверах с разными URL-адресами действий, то это следует делать на уровне развертывания. Вы всегда можете написать файл среды при развертывании.

...