2012-06-09 6 views
21

Los usuarios recién registrados en mi pequeña aplicación deben ser aprobados por el administrador (me) antes de que puedan obtener acceso al sitio. Logré generar esos correos electrónicos en desarrollo con un after_create :send_admin_email en mi modelo de usuario, que funciona muy bien. Mi problema es que estoy generando múltiples usuarios durante mis pruebas (usando FactoryGirl) y cada usuario de prueba creado envía un correo electrónico real. Ejecutar mis pruebas es como verter melaza en enero y tengo que eliminar cientos de correos electrónicos enviados a mi bandeja de entrada. ¿Cómo apago eso?ActionMailer enviando mensajes de correo electrónico reales en modo de prueba. - ¿Cómo apagarlo?

Action Mailer Basics en el Rails Guides me dice que "de forma predeterminada, Action Mailer no envía mensajes de correo electrónico en el entorno de prueba. Se acaban de agregar a la matriz ActionMailer :: Base.deliveries".

Por otra parte, en config/environments/test.rb Tengo:

config.action_mailer.delivery_method = :test 

Eso es, además de tener en config/environment.rb:

# Configuration for using SendGrid on Heroku 
ActionMailer::Base.smtp_settings = { 
    :address  => 'smtp.sendgrid.net', 
    :port   => '587', 
    :authentication => :plain, 
    :user_name  => 'app[my app number]@heroku.com', 
    :password  => '[something super secret]', 
    :domain   => '[let's get this party started!.com]', 
    :enable_starttls_auto => true 
} 
ActionMailer::Base.delivery_method = :smtp 

Estoy seguro de que me falta algo simple y básico. He buscado y preguntas y publicaciones relacionadas sobre cómo probar que ActionMailer realmente envió correos electrónicos.

humilde gratitud de antemano por cualquier idea o ayuda.

Addendum: Siguiendo la respuesta a una pregunta similar encontrada en Is it possible to turn off ActionMailer emails when cucumber testing is happening on development? Pude dejar de enviar correos electrónicos de locura. Aún así, tuve que agregar ActionMailer::Base.delivery_method = :test a varios archivos rspec. ¿Hay alguna manera de poder cerrar esto globalmente? Alguien tiene alguna idea sobre lo que está pasando?

+0

Con todos esos correos electrónicos, excedí mi 200/día permitido por Enviar cuadrícula. He encontrado [Cómo escribir características que en realidad no usan Sendgrid?] (Https://groups.google.com/group/heroku/browse_thread/thread/7a4044f299ccf1fc/a0d687041fd97389?pli=1) que dice que 'ActionMailer :: Base.delivery_method =: smtp 'en' config/environment.rb' está anulando 'config.action_mailer.delivery_method =: test' en' config/environments/test.rb' He movido 'ActionMailer :: Base.delivery_method =: smtp 'en 'config/environments/development.rb' y' config/environments/production.rb' que pueden funcionar. Actualizaré mañana. – BenU

Respuesta

34

Así que lo he descubierto. Tener la línea ActionMailer::Base.delivery_method = :smtp en config/environment.rb anula ActionMailer::Base.delivery_method = :test en config/environments/test.rb.

Por lo tanto, elimine esa línea, ActionMailer::Base.delivery_method = :smtp' desde config/environment.rb y colóquela en config/environments/production.rb. que le permite colocar ActionMailer::Base.delivery_method = :test en config/environments/test.rb y la versión que desee en config/environments/development.rb. Hice development.rb :test mientras llenaba mi base de datos usando Faker y la cambiaba a smtp, así que estaba seguro de que los correos electrónicos reales se enviaban como una verificación adicional.

Nota: Debe reiniciar su servidor para que estos cambios surtan efecto.

Otra nota: Heroku's current SendGrid Instructions poner el código de configuración SendGrid Heroku en una nueva inicializadores archivo mail.rb config// que probablemente requerirá la eliminación de su última línea y la colocación de la versión deseada en cada config/ambientes/[production.rb , development.rb, test.rb]

+1

+1 para esa nota sobre las instrucciones de sendgrid de heroku, ¡gracias! –

+0

¡Gracias por anular la información! Eso era lo que necesitaba saber para volver a poner verde todas mis pruebas. –

12

Quizás útil ...

mi config/environment.rb se no contieneActionMailer::Base.delivery_method = :smtp y mi config/ambientes/test.rb hicieron contienen ActionMailer::Base.delivery_method = :test pero rieles todavía envío de correos durante la prueba.

Simplemente agregué lo siguiente a config/environments/test.rb solucionarlo:

config.action_mailer.perform_deliveries = false 
0

que se enfrentaron a la situación similar en Rails4.2 (integración ActiveJob con ActionMailer) incluso si yo no hice escritura delivery_method =: SMTP en config/environment.rb.

En mi caso, el problema aquí ocurrió después de usar "resque" como trabajador de fondo. Finalmente, descubrí que era la siguiente configuración MAL:

config/inicializadores/active_job.rb:

Rails.application.config.active_job.queue_adapter = :resque # here is WRONG 

... porque efectuarse a modo de prueba también.

Así que configuré "queue_adapter =: resque" solo en config/environments/{development, production.rb}. Ahora, eso funciona como espero.

Cuestiones relacionadas