Heroku / devise - Falta el host al que enlazar! Por favor proporcione: parámetro de host o establecer opciones de url predeterminadas [: host]


Estoy tratando de empujar mi aplicación en heroku. Todavía estoy en dev. Uso devise con el módulo confirmable.

Cuando intento agregar un usuario con la consola heroku obtuve este error:

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

En el entorno de prueba y desarrollo tengo la siguiente línea:

Entornos/desarrollo.rb y entornos / test.rb

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

No he configurado nada en el entorno de producción.

He tratado de empujar con

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

Pero tampoco funciona..

I ver en la web que podría estar relacionado con ActionMailer pero no se que tengo que configurar. Muchas gracias por su idea!

EDITADO:

Hola,

Para no hacer que mi aplicación se bloquee cuando presione heroku, puse esto en mi env/test.rb and my 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 de 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 tengo:

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 Tengo esto = = > producción.log

Configuro el env/prod.rb como este:

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

Y ahora tengo esto como 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'
Author: benoitr, 2010-11-06

7 answers

Necesitas agregar esto a tu environment.rb

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

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


Debe comprobar los registros en el servidor heroku heroku logs ejecute eso desde la consola y le dirá el error exacto.

Cuando envías a heroku necesitas configurar el archivo environment.rb con el heroku subdominio:

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

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

 228
Author: thenengah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 21:58:06

Ok,

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

heroku addons:add sendgrid:free

Entonces solo tienes que configurar tu env/dev.rb y env / prod.rb como este:

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. Debería funcionar..

 36
Author: benoitr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 16:06:07

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

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

En producción.rb

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

Luego establezca la variable de entorno MAILER_URL para su aplicación de la siguiente manera

heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app
 22
Author: Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-21 03:30:20

Si se está ejecutando en Cedro:

  1. Ejecute heroku addons:add sendgrid:free desde su consola.

  2. Agrega las siguientes líneas a config/environments/production.rb en tu app.

.

  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' }
 18
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-16 15:04:02

Tuve que hacer varias cosas para que funcionara en el entorno de producción : Dentro de mi archivo production.rb (/config/environments/production.rb) He añadido 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 Idear 3

 11
Author: maudulus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-17 21:33:44

Aquí hay un truco a considerar. Hará que sea más fácil cambiar de servidor y entorno, y cambiar de dominio como en un dominio personalizado en heroku.

En lugar de codificar el nombre de host, léalo desde 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, solo tengo una acción, crear, que resulta en el envío de correos electrónicos. Puede agregar el filtro before_filter en application_controller.rb sin exclusiones para que almacene siempre el host nombre.

PRO:

  • siempre obtenga el nombre de host correcto en la URL de los correos electrónicos que envíe
  • Tener el default_url_options en nuestro servidor de ensayo configurado para production, resultó en el envío de correos electrónicos a los usuarios de prueba con enlaces a production (por supuesto, hacen clic en ellos). No hay daños, pero consume mucho tiempo.

CON:

Sin default_url_options no se 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 puedes ver inconvenientes que no puedo, por favor compartir! Gracias

 7
Author: oma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-22 20:54:48

El que trabaja después de tantas investigaciones,

  1. No olvides agregar por defecto desde: mail dirección en tu ApplicationMailer (application_mailer.rb) as,

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
    
  2. Agregue la siguiente configuración en su producción .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. Habilite IMAP desde la configuración de Gmail en la pestaña Reenvío IMAP/POP .

  4. Permitir aplicaciones menos seguras: ON from https://myaccount.google.com/lesssecureapps

Ya puedes irte. :)

 0
Author: Anshab M K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-09 09:11:25