Heroku / devise-brak hosta do linkowania! Proszę podać: parametr host lub ustawić domyślne opcje url [: host]

[8]}próbuję wcisnąć aplikację na heroku. Nadal jestem w dev. Używam devise z modułem potwierdzającym.

Kiedy próbuję dodać użytkownika z konsolą heroku dostałem ten błąd:

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

W środowisku test i dev mam następujący wiersz:

Środowiska / rozwój.rb i środowiska / test.rb

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

Nie ustawiłem czegoś w środowisku produkcyjnym.

Próbowałem pchać z

config.action_mailer.default_url_options = { :host => 'mywebsitename.com' }
config.action_mailer.default_url_options = { :host => 'heroku.mywebsitename.com' }
Ale to też nie działa..

I zobacz w sieci, że może to być związane z ActionMailer, ale nie wiem, co mam skonfigurować. Wielkie dzięki za pomysł!

Edycja:

Cześć,

Aby nie spowodować awarii aplikacji, gdy wciskam heroku, umieszczam to w moim ENV / teście.rb i mój env / dev.rb (Nie w env.rb myślę, że to dlatego, że jest to aplikacja rails 3)

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

Ale kiedy próbowałem stworzyć użytkownika w konsoli heroku:

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

Oto błędy jakie mam:

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'

Edytowane (2)

Kiedy Wpisuję heroku logi na konsoli mam to = = > produkcja.log

Konfiguruję env / prod.RB jak to:

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

A teraz mam to jako błąd przy próbie utworzenia użytkownika:

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

Musisz dodać to do swojego environment.rb

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

Upewnij się, że zmieniłeś host na URL produkcji i zachowaj go localhost dla rozwoju. Jest to dla Mailera, potrzebuje domyślnej wiadomości e-mail do wysyłania powiadomień, takich jak potwierdzenia itp...


Powinieneś sprawdzić logi na serwerze heroku heroku logs Uruchom to z konsoli i powie Ci dokładny błąd.

Po wciśnięciu do heroku musisz skonfigurować plik environment.rb z heroku subdomena:

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

W zależności od wersji, powinno to wejść production.rb, a nie 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-07 21:58:06

Ok,

Najpierw musisz zainstalować gem sendgrid za pomocą tej linii poleceń:

heroku addons:add sendgrid:free

Następnie wystarczy skonfigurować swój env / dev.rb i env / prod.rb jak to:

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' }
Wciśnij Gita i heroku. Powinno zadziałać..
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-07 16:06:07

Powyższy anwser Codeglota robi to, co trzeba, ale chcieliśmy czegoś bardziej elastycznego, więc zrobiliśmy to:

W Heroku uruchamiamy wiele środowisk produkcyjnych do wystawiania i testowania, więc potrzebujemy elastycznego rozwiązania dla produkcji.plik środowiska RB.

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

Następnie Ustaw zmienną środowiskową MAILER_URL dla Twojej aplikacji w ten sposób

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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-21 03:30:20

If you ' re running on Cedar:

  1. Uruchom heroku addons:add sendgrid:free z konsoli.

  2. Dodaj następujące linie do config/environments/production.rb w aplikacji.

.

  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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-16 15:04:02

Musiałem zrobić kilka rzeczy, aby to działało w środowisku produkcyjnym : Wewnątrz mojego pliku production.rb (/config/environments / production.rb) dodałem co następuje:

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"

To jest z Rails 4 i Devise 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-17 21:33:44

Oto sztuczka do rozważenia. Ułatwi to zmianę serwera i środowiska oraz zmianę domeny jak w niestandardowej domenie w heroku.

Zamiast kodowania na twardo nazwy hosta, odczytaj ją z żądania. Oto przykład prostej aplikacji, którą mam.

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

W prostym przykładzie mam tylko jedną akcję, create, która powoduje wysłanie e-maili. Możesz dodać before_filter w application_controller.rb bez wyłączników, aby zawsze przechowywać hosta nazwisko.

PRO:

  • zawsze otrzymuj poprawną nazwę hosta w adresie URL wiadomości e-mail, które wysyłasz
  • mając default_url_options na naszym staging server skonfigurowany dla production , spowodowało to wysłanie e-maili do testowych użytkowników z linkami do produkcji (klikają je oczywiście). Bez uszkodzeń, ale bardzo czasochłonne.

CON:

Bez default_url_options nie można wysłać ręcznie w konsoli

#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

Jeśli widzisz wady, których nie mogę, Proszę się podzielić! Dzięki

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-22 20:54:48

Pracującego po tylu badaniach,]}

  1. Nie zapomnij dodać domyślnego z adresu: mail w swoim ApplicationMailer (application_mailer.rb) as,

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
    
  2. Dodaj poniższą konfigurację w swojej produkcji .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. Włącz IMAP z ustawień Gmaila w zakładce przekazywanie IMAP/POP .

  4. Zezwalaj na mniej bezpieczne aplikacje: ON from https://myaccount.google.com/lesssecureapps

Możesz już iść. :)
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-09 09:11:25