2

Я использую Rails 4.2, AWS-SES gem и Mailform gem. Я пытаюсь создать AWS SES в разработке и добавил это config/development.rb:AWS SES Тайм-аут

# Configure mail using AWS SES 
    config.after_initialize do 
    ActionMailer::Base.delivery_method = :amazon_ses 
    ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'], 
     :access_key_id => ENV['AWS_SECRET_KEY_ID'], 
     :server => 'email.eu-west-2.amazonaws.com' 
    ) 
    end 

При попытке отправить электронную почту с консоли, я получаю тайм-аут после 30 секунд. Я начал писать все это с просьбой о помощи, но потом мне пришло в голову, что MailForm не может быть получен из ActionMailer. Конечно, MailForm::Base имеет суперкласс Object, поэтому настройка ActionMailer бессмысленно.

Я изменил эти две строки, чтобы настроить MailForm::Base, но я все равно получаю таймаут. Возможно ли, что эти два драгоценных камня несовместимы? В противном случае любые предложения по разрешению или устранению неполадок будут оценены.

ответ

3

Как я уже говорил в моем вопросе, драгоценные камни MailForm и AWS-SES не совместимы. Возможно, их можно заставить работать вместе, но я выбрал другой маршрут.

Некоторые ключи к настройке AWS-SES (код, приведенный ниже, для справки):

  1. AWS создана - с AWS вы начинаете в изолированном режиме. Вам нужно зарегистрировать все адреса электронной почты вашего назначения в консоли SES, чтобы что-нибудь было работать. Нажмите на ссылку Email Addresses, чтобы перечислить ваши подтвержденные адреса и добавить больше. Кроме того, вам необходимо будет установить учетные данные AWS IAM для использования с драгоценным камнем. Когда вы это сделаете, убедитесь, что у пользователя установлена ​​управляемая политика SES с полным доступом (на консоли IAM).
  2. :server установка - AWS работает в нескольких регионах, но ваша учетная запись SES будет установлена ​​в одном из них. Чтобы определить свой регион, перейдите на консоль AWS и нажмите SES. Вы увидите свой регион в URL-адресе - для меня это region=us-west-2. Я рекомендую настроить инициализатор, как описано в статье Дана Крука excellent article. Я сделал это, как рекомендовал Дэн, за исключением того, что я установил способ доставки :amazon-ses и добавил строку конфигурации сервера.
  3. Конфигурация - статья Дэна (упомянутая выше) объясняет, как установить delivery_method в конфигурационный файл среды. Опять же, я использовал :amazon-ses.
  4. После установки AWS и установки вашего драгоценного камня вы можете протестировать свою настройку в консоли рельсов. Намного легче устранить проблему, чем в вашей кодовой базе.
  5. Немного несвязанный, но я использовал жемчужину Dotenv для управления настройками моей среды. Вкратце, как только вы установите драгоценный камень, вы можете вставить все настройки своей среды в ~/.env и получить доступ к ним в ENV на протяжении всего вашего кода.

/config/initializers/amazon-ses.rb

ActionMailer::Base.add_delivery_method :amazon_ses, AWS::SES::Base, 
    :access_key_id  => ENV['AWS_SECRET_KEY_ID'], 
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'], 
    :server    => 'email.us-west-2.amazonaws.com' 

/config/environments/development.rb (выдержки):

# Configure mailer for development test 
config.action_mailer.raise_delivery_errors = true 

# Configure mail using AWS SES 
config.action_mailer.delivery_method = :amazon_ses 

# Configure URL options 
host = 'www.example.com' 
config.action_mailer.default_url_options = { host: host } 

Конечно, чтобы сделать эту работу продукции, вам необходимо внести эти изменения в /config/environments/production.rb. Вам также нужно будет сделать свои секретные настройки AWS на вашем производственном сервере. Если вы используете Heroku:

$ heroku config:add AWS_SECRET_KEY_ID=12345XYZ 
$ heroku config:add AWS_SECRET_ACCESS_KEY=67890ABC 
Смежные вопросы