Heroku / idear - ¡Falta un host para vincular! Proporcione: parámetro de host o establezca default_url_options [: host]

178

Estoy tratando de empujar mi aplicación en heroku. Todavía estoy en desarrollo. Yo uso idear con el módulo confirmable.

Cuando intento agregar un usuario con la consola heroku, aparece 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:

ambientes / development.rb y ambientes / test.rb

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

No he configurado algo 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 ...

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

EDITADO:

Hola,

Para no hacer que mi aplicación se bloquee cuando presiono heroku, puse esto en mi env / test.rb y mi env / dev.rb (no en env.rb, creo que es porque es una aplicación 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 los registros de heroku en la consola, obtengo esto ==> production.log <== Así que creo que 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 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'
benoitr
fuente

Respuestas:

243

Necesitas agregar esto a tu environment.rb

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

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


Debe verificar los registros en el servidor heroku heroku logsque se ejecutan desde la consola y le indicará el error exacto.

Cuando presiona a heroku, debe configurar el environment.rbarchivo con el subdominio heroku:

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

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

thenengah
fuente
¡Hola Sam! Lo siento pero no lo entendí. Solo agrego la línea config.action_mailer.default_url_options = {: host => 'localhost'} en mi env.rb pero mi aplicación rails 3 se bloquea en heroku. ¿Tenía que poner algo en env / prod.rb también? (lo siento mi Inglés es por lo regular, ..)
benoitr
Además, ¿tuve que poner mi aplicación de rieles en modo de producción? ¡Gracias!
benoitr
1
:host => 'yourapp.heroku.com' Este debería ser tu dominio. Por ejemplo, si su dominio es yahoo.com, entonces debería serlo yahoo.heroku.como si ya configuró dominios personalizados, solo será su URLyahoo.com
thenengah el
1
Gracias Sam, encuentro la solución. El hecho es que no tenía el complemento sendgrid y mi smtp no se configuró. Muchas gracias por toda su copia de seguridad!
benoitr el
1
¿No va a ser config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', en lugar de justo config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
maudulus
37

Okay,

Primero debe 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 de esta manera:

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

Empuja git y heroku. Deberia de funcionar..

benoitr
fuente
Recibo este error cuando hago referencia a config.action_mailer en production.rb: /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb: 77: en method_missing': undefined method action_mailer 'para # <Rails:: Aplicación :: Configuración: 0x0000000241f760> (NoMethodError)
Laran Evans
No estoy seguro de poder ayudar aquí ... ¿Lo mencionó dentro del bloque? (Sitio web :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... final)
benoitr
66
ahora el comando sendgrid es addons heroku: add sendgrid: starter (ver detalles de uso en devcenter.heroku.com/articles/sendgrid )
Danny
23

La respuesta de Codeglot arriba 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 etapas y 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'] }

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

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

Si estás corriendo en Cedar :

  1. corre heroku addons:add sendgrid:freedesde tu consola.

  2. Agregue las siguientes líneas a config/environments/production.rben 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' }
Miguel
fuente
13

Tuve que hacer varias cosas para que funcionara en el entorno de producción : dentro de mi production.rbarchivo (/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

maudulus
fuente
1
Esta estructura default_url_optionscausó un error que hizo que mis activos de precompilación fallaran, solo para su información. Cuando lo cambié de nuevo a `= {host: 'myappsname.herokuapp.com'}` funcionó.
Liz
0

El que trabaja después de tanta investigación,

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

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

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

Ahora estás listo para irte. :)

Anshab MK
fuente