Heroku / ประดิษฐ์ - ไม่มีโฮสต์เชื่อมโยงถึง! โปรดระบุ: พารามิเตอร์โฮสต์หรือตั้งค่า default_url_options [: host]


178

ฉันพยายามที่จะผลักดันแอปของฉันใน heroku ฉันยังอยู่ในการพัฒนา ฉันใช้การประดิษฐ์ด้วยโมดูลที่ยืนยันได้

เมื่อฉันพยายามเพิ่มผู้ใช้ด้วยคอนโซล heroku ฉันพบข้อผิดพลาดนี้:

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

ในสภาพแวดล้อมการทดสอบและ dev ฉันมีบรรทัดต่อไปนี้:

environment / development.rb และ environment / test.rb

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

ฉันไม่ได้ตั้งค่าบางอย่างในสภาพแวดล้อมการผลิต

ฉันพยายามที่จะผลักดันด้วย

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

แต่มันก็ไม่ทำงานเหมือนกัน ..

ฉันเห็นบนเว็บว่าเกี่ยวข้องกับ ActionMailer แต่ฉันไม่รู้ว่าต้องกำหนดค่าอะไร ขอบคุณมากสำหรับความคิดของคุณ!

แก้ไข:

สวัสดี

เพื่อที่จะไม่ทำให้แอพของฉันล่มเมื่อฉันกด heroku ฉันใส่มันไว้ใน env / test.rb และ env / dev.rb ของฉัน (ไม่ใช่ใน env.rb ฉันคิดว่ามันเป็นเพราะแอพราง 3)

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

แต่เมื่อฉันพยายามสร้างผู้ใช้ในคอนโซล heroku:

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

นี่คือข้อผิดพลาดที่ฉันได้รับ:

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'

แก้ไขแล้ว (2)

เมื่อฉันพิมพ์ heroku บนคอนโซลฉันได้รับ ==> production.log <== ดังนั้นฉันคิดว่าเมื่อมีคนใช้ heroku มันมีอยู่แล้วในการผลิต

ฉันกำหนดค่า env / prod.rb ดังนี้:

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

และตอนนี้ฉันมีข้อผิดพลาดนี้เมื่อฉันพยายามสร้างผู้ใช้:

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'

คำตอบ:


243

คุณต้องเพิ่มสิ่งนี้ในของคุณ environment.rb

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

ตรวจสอบให้แน่ใจว่าคุณเปลี่ยนhostเป็น url ที่ใช้ในการผลิตและเก็บไว้เป็นโฮสต์สำหรับการพัฒนา นี่คือจดหมายที่ต้องใช้อีเมลเริ่มต้นในการส่งประกาศเช่นการยืนยัน ฯลฯ ...


คุณควรตรวจสอบบันทึกในเซิร์ฟเวอร์ heroku heroku logsว่าจากคอนโซลและมันจะบอกคุณถึงข้อผิดพลาดที่แน่นอน

เมื่อคุณกดไปที่ heroku คุณจะต้องกำหนดค่าenvironment.rbไฟล์ด้วยโดเมนย่อย heroku:

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

ขึ้นอยู่กับรุ่นนี้ควรจะไปในไม่production.rbenvironment.rb


สวัสดีแซม! ฉันขอโทษ แต่ฉันไม่เข้าใจ ฉันเพิ่งเพิ่มบรรทัด config.action_mailer.default_url_options = {: host => 'localhost'} ใน env.rb ของฉัน แต่แอปรางของฉัน 3 ขัดข้องใน heroku ฉันต้องใส่อะไรลงใน env / prod.rb ด้วยเหรอ? (ขออภัยภาษาอังกฤษของฉันดีพอ .. )
benoitr

นอกจากนี้ฉันต้องใส่แอพทางรถไฟของฉันในโหมดการผลิตหรือไม่? ขอบคุณ!
benoitr

1
:host => 'yourapp.heroku.com' นี่ควรเป็นโดเมนของคุณ ตัวอย่างเช่นหากโดเมนของคุณคือ yahoo.com ก็ควรจะเป็นyahoo.heroku.comหรือถ้าคุณตั้งค่าโดเมนที่กำหนดเองแล้วมันจะเป็น URL ของคุณyahoo.com
thenengah

1
ขอบคุณแซมฉันหาทางออก ความจริงก็คือว่าฉันไม่ได้มี sendgrid addon และ smtp ของฉันไม่ได้กำหนดค่า ขอบคุณมากสำหรับการสำรองข้อมูลทั้งหมดของคุณ!
benoitr

1
มันจะconfig.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com'เป็นไปได้config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'หรือไม่?
maudulus

37

ตกลง,

ก่อนอื่นคุณต้องติดตั้ง sendgrid gem ด้วยบรรทัดคำสั่งนี้:

heroku addons:add sendgrid:free

จากนั้นคุณต้องกำหนดค่า env / dev.rb และ env / prod.rb ดังนี้:

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 และ heroku มันควรจะทำงาน ..


ฉันได้รับข้อผิดพลาดนี้เมื่อฉันอ้างอิง config.action_mailer ใน production.rb: /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb: 77: ในmethod_missing': undefined method action_mailer 'สำหรับ # <Rails:: แอปพลิเคชัน :: การกำหนดค่า: 0x0000000241f760> (NoMethodError)
Laran Evans

ฉันไม่แน่ใจว่าฉันสามารถช่วยที่นี่ ... คุณอ้างอิงภายในบล็อกหรือไม่ (เว็บไซต์ :: Application.configure ทำ ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... สิ้นสุด)
benoitr

6
ตอนนี้คำสั่ง sendgrid คือส่วนเสริมของ heroku: เพิ่ม sendgrid: ตัวเริ่มต้น (ดูรายละเอียดการใช้งานได้ที่devcenter.heroku.com/articles/sendgrid )
Danny

24

ผู้ประกาศข่าวของ Codeglot ทำหน้าที่ได้ แต่เราต้องการบางสิ่งที่ยืดหยุ่นกว่านี้เล็กน้อยดังนั้นเราจึงทำสิ่งนี้:

ใน Heroku เราใช้สภาพแวดล้อมการผลิตหลายแบบสำหรับการจัดเตรียมและการทดสอบดังนั้นเราจึงต้องการโซลูชันที่ยืดหยุ่นสำหรับไฟล์สภาพแวดล้อม production.rb

ในการผลิต

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

จากนั้นตั้งค่าตัวแปรสภาพแวดล้อม MAILER_URL สำหรับแอปของคุณเช่นนั้น

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

18

หากคุณกำลังทำงานกับCedar :

  1. เรียกใช้heroku addons:add sendgrid:freeจากคอนโซลของคุณ

  2. เพิ่มบรรทัดต่อไปนี้config/environments/production.rbในแอปของคุณ

.

  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

ฉันต้องทำหลายสิ่งเพื่อให้มันทำงานได้ในสภาพแวดล้อมการผลิต : ภายในproduction.rbไฟล์ของฉัน(/config/environment/production.rb) ฉันได้เพิ่มสิ่งต่อไปนี้:

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"

นี่คือRails 4และDevise 3


1
โครงสร้างของการdefault_url_optionsทำให้เกิดข้อผิดพลาดซึ่งทำให้การรวบรวมทรัพย์สินของฉันล้มเหลวเพียงแค่ fyi เมื่อฉันเปลี่ยนมันกลับไปเป็น `= {host: 'myappsname.herokuapp.com'}` มันใช้งานได้
Liz

0

การทำงานหลังจากการวิจัยมากมาย

  1. อย่าลืมเพิ่มค่าเริ่มต้นจาก: ที่อยู่อีเมลในApplicationMailerของคุณ(application_mailer.rb)ในฐานะ

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
  2. เพิ่มการกำหนดค่าของคุณด้านล่างใน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. เปิดใช้งาน IMAP จากการตั้งค่า Gmail ของคุณในการส่งต่อแท็บIMAP / POP

  4. อนุญาตแอปที่ปลอดภัยน้อยกว่า: เปิดจากhttps://myaccount.google.com/lesssecureapps

ตอนนี้คุณก็พร้อมแล้ว :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.