Heroku / ideare - Host mancante a cui collegarsi! Fornisci: parametro host o imposta default_url_options [: host]


178

Sto cercando di spingere la mia app su heroku. Sono ancora in sviluppo. Uso escogitare con il modulo confermabile.

Quando provo ad aggiungere un utente con la console di heroku ho ricevuto questo errore:

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

in ambiente test e sviluppo ho la seguente riga:

ambienti / sviluppo.rb e ambienti / test.rb

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

Non ho installato qualcosa nell'ambiente di produzione.

Ho provato a spingere con

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

ma non funziona troppo ..

Vedo sul web che potrebbe essere correlato ad ActionMailer ma non so cosa devo configurare. Mille grazie per la tua idea!

MODIFICATO:

Ciao,

Per evitare che la mia app si arresti in modo anomalo quando premo heroku, l'ho inserito nella mia env / test.rb e nella mia env / dev.rb (non in env.rb penso che sia perché è un'app di rails 3)

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

Ma quando ho provato a creare un utente nella console di heroku:

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

qui ci sono errori che ho ottenuto:

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'

MODIFICATO (2)

Quando scrivo i log di heroku sulla console ho ricevuto questo ==> production.log <== Quindi penso che quando uno si distribuisce su heroku è già in produzione.

Configuro env / prod.rb in questo modo:

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

e ora ho questo come errore quando provo a creare un utente:

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'

Risposte:


243

Devi aggiungere questo al tuo environment.rb

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

Assicurati di cambiare hostl'URL di produzione e di mantenerlo localhost per lo sviluppo. Questo è per il mailer, ha bisogno di una email predefinita per inviare avvisi come conferme ecc ...


Dovresti controllare i log sul server heroku heroku logsche eseguono dalla console e ti dirà l'errore esatto.

Quando passi a heroku devi configurare il environment.rbfile con il sottodominio heroku:

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

A seconda della versione, questo dovrebbe andare production.rb, non environment.rb.


Ciao Sam! Mi dispiace ma non l'ho capito. Aggiungo solo la riga config.action_mailer.default_url_options = {: host => 'localhost'} nel mio env.rb ma la mia app di rails 3 si arresta in modo anomalo su heroku. Ho dovuto mettere qualcosa anche su env / prod.rb? (scusate il mio inglese è così così così ..)
benoitr

Inoltre, ho dovuto mettere la mia app rails in modalità di produzione? Grazie!
benoitr,

1
:host => 'yourapp.heroku.com' questo dovrebbe essere il tuo dominio. Ad esempio, se il tuo dominio è yahoo.com, allora dovrebbe essere yahoo.heroku.como se hai già impostato domini personalizzati sarà solo il tuo urlyahoo.com
thenengah

1
Grazie Sam, trovo la soluzione. Il fatto è che non avevo il componente aggiuntivo sendgrid e il mio smtp non è stato configurato. Mille grazie per tutto il tuo backup!
Benoitr,

1
Non sarà config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', al contrario di solo config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
Maudulus,

37

Ok,

Per prima cosa devi installare la gemma sendgrid con questa riga di comando:

heroku addons:add sendgrid:free

Quindi devi solo configurare env / dev.rb ed env / prod.rb in questo modo:

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

Spingi git e heroku. Dovrebbe funzionare..


Ottengo questo errore quando faccio riferimento a config.action_mailer in production.rb: /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb: 77: in method_missing': undefined method action_mailer 'per # <Rails:: Applicazione :: Configurazione: 0x0000000241f760> (NoMethodError)
Laran Evans,

Non sono sicuro di poterti aiutare qui ... Hai fatto riferimento nel blocco? (Sito Web: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... end)
benoitr

6
ora il comando sendgrid è heron addons: aggiungi sendgrid: starter (visualizza i dettagli di utilizzo su devcenter.heroku.com/articles/sendgrid )
Danny

23

La risposta di Codeglot sopra fa il lavoro, ma volevamo qualcosa di un po 'più flessibile, quindi abbiamo fatto questo:

Su Heroku, eseguiamo più ambienti di produzione per la stadiazione e i test, quindi abbiamo bisogno di una soluzione flessibile per il file di ambiente production.rb.

In production.rb

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

Quindi imposta la variabile d'ambiente MAILER_URL per la tua app in questo modo

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

18

Se corri su Cedar :

  1. corri heroku addons:add sendgrid:freedalla tua console.

  2. Aggiungi le seguenti righe config/environments/production.rbnella tua 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' }

13

Ho dovuto fare una serie di cose per farlo funzionare nell'ambiente di produzione : all'interno del mio production.rbfile (/config/environments/production.rb) ho aggiunto quanto segue:

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"

Questo è con Rails 4 e Devise 3


1
Questa struttura del ha default_url_optionscausato un errore che ha fatto fallire le mie risorse di precompilazione, solo fyi. Quando l'ho cambiato di nuovo in `= {host: 'myappsname.herokuapp.com'}` ha funzionato.
Liz,

0

Quello funzionante dopo tante ricerche,

  1. Non dimenticare di aggiungere il valore predefinito da: indirizzo di posta nel tuo ApplicationMailer (application_mailer.rb) come,

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
  2. Aggiungi la configurazione seguente nel tuo 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. Abilita IMAP dalle impostazioni di Gmail nella scheda Inoltro IMAP / POP .

  4. Consenti app meno sicure: ON da https://myaccount.google.com/lesssecureapps

Ora sei a posto. :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.