Heroku / merancang - Host yang tidak ada untuk terhubung! Harap berikan: parameter host atau setel default_url_options [: host]


178

Saya mencoba untuk mendorong aplikasi saya di heroku. Saya masih di dev. Saya menggunakan merancang dengan modul yang dapat dikonfirmasi.

Ketika saya mencoba menambahkan pengguna dengan konsol heroku saya mendapatkan kesalahan ini:

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

dalam lingkungan pengujian dan pengembangan saya memiliki baris berikut:

lingkungan / development.rb dan lingkungan / test.rb

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

Saya tidak mengatur sesuatu di lingkungan produksi.

Saya sudah mencoba untuk mendorong

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

tapi itu tidak berhasil juga ..

Saya melihat di web bahwa itu mungkin terkait dengan ActionMailer tapi saya tidak tahu apa yang harus saya konfigurasi. Terima kasih banyak atas ide Anda!

Diedit:

Hai,

Agar tidak membuat aplikasi saya crash ketika saya mendorong heroku saya meletakkan ini di env / test.rb saya dan env / dev.rb saya (tidak di env.rb saya pikir itu karena itu adalah aplikasi rails 3)

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

Tetapi ketika saya mencoba membuat pengguna di konsol heroku:

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

berikut adalah kesalahan yang saya dapatkan:

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'

Diedit (2)

Ketika saya mengetik log heroku di konsol saya mendapatkan ini ==> production.log <== Jadi saya pikir ketika seseorang menyebarkan heroku itu sudah dalam produksi.

Saya mengkonfigurasi env / prod.rb seperti ini:

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

dan sekarang saya memiliki ini sebagai kesalahan ketika saya mencoba membuat Pengguna:

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'

Jawaban:


243

Anda perlu menambahkan ini ke environment.rb

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

Pastikan Anda mengubah hostke url produksi Anda dan menyimpannya di localhost untuk pengembangan. Ini untuk pengirim, perlu email default untuk mengirim pemberitahuan seperti konfirmasi dll ...


Anda harus memeriksa log di server heroku heroku logsjalankan dari konsol dan itu akan memberi tahu Anda kesalahan yang sebenarnya.

Saat Anda mendorong ke heroku, Anda perlu mengonfigurasi environment.rbfile dengan subdomain heroku:

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

Tergantung pada versi, ini harus masuk production.rb, bukan environment.rb.


Hai sam! Saya minta maaf tapi saya tidak mengerti. Saya hanya menambahkan baris config.action_mailer.default_url_options = {: host => 'localhost'} di env.rb saya tetapi aplikasi rails 3 saya mogok di heroku. Apakah saya harus meletakkan sesuatu di env / prod.rb juga? (maaf bahasa Inggris saya biasa-biasa saja ..)
benoitr

Juga, apakah saya harus meletakkan aplikasi rel saya dalam mode produksi? Terima kasih!
benoitr

1
:host => 'yourapp.heroku.com' ini harus menjadi domain Anda. Misalnya, jika domain Anda adalah yahoo.com, maka seharusnya yahoo.heroku.comatau jika Anda sudah menyiapkan domain khusus, itu hanya akan menjadi url Andayahoo.com
thenengah

1
Terima kasih Sam, saya menemukan solusinya. Faktanya adalah saya tidak memiliki addg sendgrid dan smtp saya belum mengkonfigurasi. Terima kasih banyak atas semua cadangan Anda!
benoitr

1
Bukankah itu akan terjadi config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', yang bertentangan dengan adil config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
maudulus

37

Baik,

Pertama, Anda harus menginstal permata sendgrid dengan baris perintah ini:

heroku addons:add sendgrid:free

Maka Anda hanya perlu mengkonfigurasi env / dev.rb dan env / prod.rb seperti ini:

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

Dorong git dan heroku. Itu harus bekerja ..


Saya mendapatkan kesalahan ini ketika saya mereferensikan config.action_mailer di 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 'for # <Rails:: Application :: Configuration: 0x0000000241f760> (NoMethodError)
Laran Evans

Saya tidak yakin dapat membantu di sini ... Apakah Anda merujuknya di dalam blok? (Situs web :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... end)
benoitr

6
sekarang perintah sendgrid adalah heroku addons: add sendgrid: starter (lihat detail penggunaan di devcenter.heroku.com/articles/sendgrid )
Danny

23

Anwser Codeglot di atas berfungsi, tetapi kami menginginkan sesuatu yang sedikit lebih fleksibel, jadi kami melakukan ini:

Di Heroku, kami menjalankan beberapa lingkungan Produksi untuk pementasan dan pengujian, jadi kami membutuhkan solusi yang fleksibel untuk file lingkungan production.rb.

Dalam produksi

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

Kemudian atur variabel lingkungan MAILER_URL untuk aplikasi Anda seperti itu

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

18

Jika Anda menggunakan Cedar :

  1. lari heroku addons:add sendgrid:freedari konsol Anda.

  2. Tambahkan baris berikut ke config/environments/production.rbdalam aplikasi Anda.

.

  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

Saya harus melakukan sejumlah hal agar dapat berfungsi di lingkungan produksi : Di dalam production.rbfile saya (/config/environmentments/production.rb) saya menambahkan yang berikut ini:

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"

Ini dengan Rails 4 dan Rancangan 3


1
Struktur ini default_url_optionsmenyebabkan kesalahan yang membuat aset yang dikompilasi gagal, hanya saja. Ketika saya mengubahnya kembali ke `= {host: 'myappsname.herokuapp.com'}` itu berhasil.
Liz

0

Yang berhasil setelah begitu banyak penelitian,

  1. Jangan lupa untuk menambahkan default dari: alamat email di ApplicationMailer Anda (application_mailer.rb) sebagai,

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
  2. Tambahkan konfigurasi di bawah ini di production.rb Anda .

    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. Aktifkan IMAP dari pengaturan Gmail Anda di tab Penerusan IMAP / POP .

  4. Izinkan aplikasi yang kurang aman: HIDUP dari https://myaccount.google.com/lesssecureapps

Anda sekarang baik untuk pergi. :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.