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

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 => "test@test.com", :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 bash 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' 

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 progtwig 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 .

De acuerdo,

Primero tienes que instalar la gem 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..

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 

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' } 

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

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: "ceo@example.com") 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

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: 'yourmail@gmail.com' 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: 'yourmail@gmail.com', 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. 🙂

    Intereting Posts