Heroku / devise - Bağlantı kurulamayan sunucu eksik! Lütfen sağlayın: host parametresi veya set default_url_options [: host]


178

Uygulamamı heroku üzerine aktarmaya çalışıyorum. Hala geliştiriciyim. Onaylanabilir modül ile cihaz kullanıyorum.

Heroku konsoluna sahip bir kullanıcı eklemeye çalıştığımda şu hatayı aldım:

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

test ve dev ortamında ben aşağıdaki satırı var:

ortamlar / development.rb ve ortamlar / test.rb

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

Üretim ortamında bir şey kurmadım.

İtmeye çalıştım

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

ama o da çalışmıyor.

Web'de ActionMailer ile ilgili olabileceğini görüyorum, ancak neyi yapılandırmam gerektiğini bilmiyorum. Fikriniz için çok teşekkürler!

REDAKTE:

Selam,

Heroku'ya bastığımda uygulamamın çökmesini önlemek için bunu env / test.rb ve env / dev.rb'ye koydum (env.rb'de değil, bunun bir ray 3 uygulaması olduğu için olduğunu düşünüyorum)

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

Ancak heroku konsolunda bir kullanıcı oluşturmaya çalıştığımda:

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

İşte aldığım hatalar:

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'

DÜZENLENMİŞ (2)

Konsolda heroku günlükleri yazdığımda bunu ==> production.log <== aldım.

Env / prod.rb dosyasını şu şekilde yapılandırıyorum:

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

ve şimdi bir kullanıcı oluşturmaya çalıştığımda bu hata var:

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'

Yanıtlar:


243

Bunu, environment.rb

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

hostÜretim URL'nizle değiştirdiğinizden emin olun ve geliştirme için localhost'u koruyun. Bu, posta göndericisi içindir, onaylar vb.Gibi bildirimler göndermek için varsayılan bir e-postaya ihtiyaç duyar ...


Heroku sunucusundaki günlükleri heroku logskonsoldan kontrol etmelisiniz ve bu size tam hatayı söyleyecektir.

Heroku'ya bastığınızda, environment.rbdosyayı heroku alt etki alanı ile yapılandırmanız gerekir :

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

Sürüme bağlı olarak, bu girmeli production.rb, değil environment.rb.


Merhaba Sam! Üzgünüm ama anlamadım. Ben sadece env.rb içinde config.action_mailer.default_url_options = {: host => 'localhost'} satırını ekliyorum ama raylarım 3 uygulaması heroku'da kilitleniyor. Env / prod.rb dosyasına da bir şey koymak zorunda mıydım? (üzgünüm ingilizcem çok so ..)
benoitr

Ayrıca, raylar uygulamasını üretim moduna sokmam gerekti mi? Teşekkürler!
benoitr

1
:host => 'yourapp.heroku.com' bu sizin alanınız olmalıdır. Örneğin, alan adınız yahoo.com ise, o zaman olmalı yahoo.heroku.comveya özel alan adlarını zaten yahoo.com
kurduysanız

1
Teşekkürler Sam, çözümü buldum. Gerçek şu ki, sendgrid eklentisi yoktu ve benim smtp yapılandırılmadı. Tüm yedeklemeniz için çok teşekkürler!
benoitr

1
Tam config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com'aksine, olmayacak config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'mı?
maudulus

37

Tamam,

Öncelikle sendgrid gem'ini bu komut satırı ile yüklemelisiniz:

heroku addons:add sendgrid:free

Daha sonra env / dev.rb ve env / prod.rb dosyanızı şu şekilde yapılandırmanız gerekir:

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

Git ve heroku'yu itin. İşe yaramalı..


Üretimde config.action_mailer'a başvurduğumda bu hatayı alıyorum. 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 'için # <Raylar:: Uygulama :: Yapılandırma: 0x0000000241f760> (NoMethodError)
Laran Evans

Burada yardım edebileceğimden emin değilim ... Blok içinde referans verdiniz mi? (Web sitesi :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... son)
benoitr

6
Şimdi sendgrid komut Heroku eklentileri geçerli: eklenti sendgrid: marş (en görünümü kullanım ayrıntıları devcenter.heroku.com/articles/sendgrid )
Danny

24

Codeglot'ın yukarıdaki anwser işi yapıyor, ancak biraz daha esnek bir şey istedik, bu yüzden bunu yaptık:

Heroku'da, hazırlama ve test için birden fazla Üretim ortamı çalıştırıyoruz, bu nedenle production.rb ortam dosyası için esnek bir çözüme ihtiyacımız var.

Üretimde. Rb

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

Ardından uygulamanız için MAILER_URL ortam değişkenini şu şekilde ayarlayın

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

18

Cedar ile koşuyorsanız :

  1. heroku addons:add sendgrid:freekonsolunuzdan çalıştırın .

  2. Aşağıdaki satırları config/environments/production.rbuygulamanıza ekleyin.

.

  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

Üretim ortamında çalışmasını sağlamak için birkaç şey yapmak zorunda kaldım : production.rbDosyamın içinde (/config/environments/production.rb) aşağıdakileri ekledim:

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"

Bu Rails 4 ve Devise 3 ile


1
Bu yapı, default_url_optionsön derleme varlıklarımı başarısız yapan bir hataya neden oldu, sadece fyi. Tekrar `= {host: 'myappsname.herokuapp.com'}` olarak değiştirdiğimde işe yaradı.
Liz

0

Pek çok araştırmadan sonra çalışan,

  1. Varsayılan eklemeyi unutmayın dan: Posta sizin adrese ApplicationMailer (application_mailer.rb) olarak,

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
  2. Production.rb dosyasına aşağıdaki yapılandırmayı ekleyin .

    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. IMAP / POP iletme sekmesindeki Gmail ayarlarınızdan IMAP erişimini etkinleştirin .

  4. Daha az güvenli uygulamalara izin ver: AÇIK dan https://myaccount.google.com/lesssecureapps

Artık gitmekte iyisin. :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.