ruby-on-rails - Heroku / Devise - Manca host per il collegamento a! Fornire: parametro host o set default_url_options





actionmailer (7)


Il lavoro dopo tante ricerche,

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

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
    
  2. Aggiungi la configurazione qui sotto 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:            '[email protected]',
      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

Adesso sei a posto. :)

Sto cercando di spingere la mia app su heroku. Sono ancora in sviluppo. Io uso inventare con il modulo confermabile.

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

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

in ambiente test e dev ho la seguente riga:

ambienti / development.rb e ambienti / test.rb

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

Non ho impostato 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 anche ..

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

MODIFICATO:

Ciao,

Per non far crashare la mia app quando spingo su heroku, la metto nel mio env / test.rb e nel mio env / dev.rb (non in env.rb penso che sia perché è un'app per 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 => "[email protected]", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")

ecco gli errori che ho ricevuto:

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 digito i registri di heroku su console, ho ottenuto questo ==> production.log <== Quindi penso che quando si esegue il deploy 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'



Se corri su Cedar :

  1. eseguire i heroku addons:add sendgrid:free dalla tua console.

  2. Aggiungi le seguenti linee a config/environments/production.rb nella 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' }



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 e 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 su git e heroku. Dovrebbe funzionare..




Devi aggiungere questo al tuo environment.rb

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

Assicurati di cambiare l' host con l'URL di produzione e di tenerlo localhost per lo sviluppo. Questo è per il mailer, ha bisogno di un'e-mail predefinita per inviare notifiche come conferme, ecc ...

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

Quando si esegue il push su heroku è necessario configurare il file environment.rb con il sottodominio heroku:

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

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




Ho dovuto fare un certo numero di cose per farlo funzionare nell'ambiente di produzione : All'interno del mio file production.rb (/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




Il compito di Codeglot sopra fa il lavoro, ma volevamo qualcosa di un po 'più flessibile, così abbiamo fatto questo:

Su Heroku, eseguiamo più ambienti di produzione per la staging e il 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 di ambiente MAILER_URL per la tua app in questo modo

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



Se hai bisogno di qualcosa di più "preciso" di distance_of_time_in_words , puoi scrivere qualcosa seguendo queste linee:

def humanize secs
  [[60, :seconds], [60, :minutes], [24, :hours], [1000, :days]].map{ |count, name|
    if secs > 0
      secs, n = secs.divmod(count)
      "#{n.to_i} #{name}"
    end
  }.compact.reverse.join(' ')
end

p humanize 1234
#=>"20 minutes 34 seconds"
p humanize 12345
#=>"3 hours 25 minutes 45 seconds"
p humanize 123456
#=>"1 days 10 hours 17 minutes 36 seconds"
p humanize(Time.now - Time.local(2010,11,5))
#=>"4 days 18 hours 24 minutes 7 seconds"

Oh, un'osservazione sul tuo codice:

(self.created_at..self.updated_at).count

è davvero un modo brutto per ottenere la differenza. Usare semplicemente:

self.updated_at - self.created_at




ruby-on-rails heroku devise actionmailer