ruby-on-rails heroku devise actionmailer

ruby on rails - Heroku/idear-¡Falta el host al que enlazar! Proporcione: parámetro de host o configure default_url_options



ruby-on-rails devise (7)

Estoy intentando impulsar mi aplicación en heroku. Todavía estoy en desarrollo. Yo uso el diseño con el módulo confirmable.

Cuando trato de agregar un usuario con la consola heroku recibí este error:

Missing host to link to! Please provide :host parameter or set default_url_options[:host]

en entorno de prueba y desarrollo, tengo la siguiente línea:

environments / development.rb y environments / test.rb

config.action_mailer.default_url_options = { :host => ''localhost:3000'' }

No tengo configurado algo en el entorno de producción.

He intentado presionar con

config.action_mailer.default_url_options = { :host => ''mywebsitename.com'' } config.action_mailer.default_url_options = { :host => ''heroku.mywebsitename.com'' }

pero tampoco funciona ...

Veo en la web que podría estar relacionado con ActionMailer, pero no sé lo que tengo que configurar. Muchas gracias por tu idea!

EDITADO:

Hola,

Para no hacer que mi aplicación se cuelgue cuando presiono heroku pongo esto en mi env / test.rb y mi env / dev.rb (no en env.rb, creo que es porque es una aplicación de rails 3)

config.action_mailer.default_url_options = { :host => ''yourapp.heroku.com'' }

Pero cuando intenté crear un usuario en la consola heroku:

User.create(:username => "test", :email => "[email protected]", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")

Aquí hay errores que obtuve:

ActionView::Template::Error: Missing host to link to! Please provide :host parameter or set default_url_options[:host] /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:473:in `url_for'' /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/url_for.rb:132:in `url_for'' /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_view/helpers/url_helper.rb:99:in `url_for'' /home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:195:in `user_confirmation_url''

EDITADO (2)

Cuando escribo heroku logs en la consola, obtengo esto ==> production.log <== Entonces, cuando uno se implementa en heroku, ya está en producción.

Configuro el env / prod.rb así:

config.action_mailer.default_url_options = { :host => ''yourapp.heroku.com'' }

y ahora tengo esto como un error cuando intento crear un usuario:

Errno::EAFNOSUPPORT: Address family not supported by protocol - socket(2) /usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `initialize'' /usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `open'' /usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `do_start'' /usr/ruby1.8.7/lib/ruby/1.8/timeout.rb:62:in `timeout''


Aquí hay un truco para considerar. Hará más fácil cambiar el servidor y el entorno, y cambiar el dominio como en un dominio personalizado en heroku.

En lugar de codificar el nombre de host, léelo de la solicitud. Aquí hay un ejemplo de una aplicación simple que tengo.

class MyMailController < ApplicationController before_filter :set_host_from_request, only: [:create] .... private def set_host_from_request ActionMailer::Base.default_url_options = { host: request.host_with_port } end end

en el ejemplo simple, tengo solo una acción, crear, que da como resultado el envío de correos electrónicos. Puede agregar el before_filter en application_controller.rb sin las exclusiones para que siempre guarde el nombre de host.

PRO:

  • siempre obtenga el nombre de host correcto en la URL de los correos electrónicos que envía
  • Teniendo la opción default_url_options en nuestro servidor de transferencia configurado para la producción , se enviaron correos electrónicos para probar a los usuarios con enlaces a producción (hacen clic en ellos por supuesto). Sin daños, pero consume mucho tiempo.

ESTAFA:

sin las opciones predeterminadas_de_url no puede enviar manualmente en la consola

#config.action_mailer.default_url_options = { :host => ''mydomain.com'' } $rails console User.invite!(email: "[email protected]") ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true ...stacktrace

Si puede ver inconvenientes que no puedo, ¡por favor comparta! Gracias


Code de Codeglot hace el trabajo, pero queríamos algo un poco más flexible, así que hicimos esto:

En Heroku, ejecutamos entornos de producción múltiples para la puesta en escena y las pruebas, por lo que necesitamos una solución flexible para el archivo de entorno production.rb.

En production.rb

config.action_mailer.default_url_options = { :host => ENV[''MAILER_URL''] }

A continuación, establezca la variable de entorno MAILER_URL para su aplicación como tal

heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app


De acuerdo,

Primero tienes que instalar la gema sendgrid con esta línea de comando:

heroku addons:add sendgrid:free

Entonces solo tiene que configurar su env / dev.rb y env / prod.rb así:

env / dev.rb

config.action_mailer.default_url_options = { :host => ''localhost:3000'' }

env / prod.rb

config.action_mailer.default_url_options = { :host => ''yourapp.heroku.com'' }

Presiona git y heroku. Deberia de funcionar..


Debe agregar esto a su environment.rb

config.action_mailer.default_url_options = { :host => ''localhost'' }

Asegúrese de cambiar el host a su url de producción y mantenerlo localhost para el desarrollo. Esto es para el programa de correo, necesita un correo electrónico predeterminado para enviar avisos como confirmaciones, etc.

Debería verificar los registros en el servidor heroku logs ejecutados desde la consola y le dirá el error exacto.

Cuando presionas heroku necesitas configurar el archivo environment.rb con el subdominio heroku:

config.action_mailer.default_url_options = { :host => ''yourapp.heroku.com'' }

Dependiendo de la versión, esto debería ir en production.rb , no environment.rb .


El que está trabajando después de tantas investigaciones,

  1. No olvide agregar el valor predeterminado de: dirección de correo electrónico en su ApplicationMailer (application_mailer.rb) como,

    class ApplicationMailer < ActionMailer::Base default from: ''[email protected]'' layout ''mailer'' end

  2. Agregue la configuración a continuación en su production.rb .

    config.action_mailer.default_url_options = { :host => ''yourapp.herokuapp.com'' } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: ''smtp.gmail.com'', port: 587, domain: ''heroku.com'', user_name: ''[email protected]'', password: ''yourgmailpassword'', authentication: ''login'', enable_starttls_auto: true }

  3. Habilita IMAP desde la configuración de Gmail en la pestaña Reenvío de IMAP / POP .

  4. Permitir aplicaciones menos seguras: activado desde https://myaccount.google.com/lesssecureapps

Ahora estás listo para irte. :)


Tuve que hacer varias cosas para que funcione en el entorno de producción : dentro de mi archivo production.rb (/config/environments/production.rb) agregué lo siguiente:

Rails.application.routes.default_url_options[:host] = ''myappsname.herokuapp.com'' config.action_mailer.delivery_method = :smtp config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = false config.action_mailer.default :charset => "utf-8"

Esto es con Rails 4 y Devise 3


Si estás corriendo en Cedar :

  1. ejecuta los heroku addons:add sendgrid:free desde tu consola.

  2. Agregue las siguientes líneas a config/environments/production.rb en su aplicación.

.

ActionMailer::Base.smtp_settings = { :address => ''smtp.sendgrid.net'', :port => ''587'', :authentication => :plain, :user_name => ENV[''SENDGRID_USERNAME''], :password => ENV[''SENDGRID_PASSWORD''], :domain => ''heroku.com'' } ActionMailer::Base.delivery_method = :smtp config.action_mailer.default_url_options = { :host => ''YOUR-DOMAIN-HERE.COM'' }