Heroku / devise - Thiếu máy chủ để liên kết đến! Vui lòng cung cấp: tham số máy chủ hoặc đặt default_url_options [: host]


178

Tôi đang cố gắng đẩy ứng dụng của mình lên heroku. Tôi vẫn còn trong dev. Tôi sử dụng devise với các mô-đun xác nhận.

Khi tôi cố gắng thêm người dùng bằng bảng điều khiển heroku, tôi đã gặp lỗi này:

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

Trong môi trường thử nghiệm và dev tôi có dòng sau:

môi trường / phát triển.rb và môi trường / test.rb

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

Tôi đã không thiết lập một cái gì đó trong môi trường sản xuất.

Tôi đã cố gắng để đẩy với

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

nhưng nó không hoạt động quá ..

Tôi thấy trên web rằng nó có thể liên quan đến ActionMailer nhưng tôi không biết mình phải cấu hình cái gì. Rất cám ơn ý tưởng của bạn!

EDITED:

Chào,

Để không làm cho ứng dụng của tôi gặp sự cố khi tôi nhấn heroku, tôi đã đặt ứng dụng này vào env / test.rb và env / dev.rb của tôi (không phải trong env.rb Tôi nghĩ rằng đó là vì đây là ứng dụng rails 3)

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

Nhưng khi tôi cố gắng tạo người dùng trong bảng điều khiển heroku:

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

đây là những lỗi tôi gặp phải:

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'

EDITED (2)

Khi tôi nhập nhật ký heroku trên bảng điều khiển, tôi đã nhận được ==> sản xuất.log <== Vì vậy, tôi nghĩ rằng khi một bản khai thác trên heroku thì nó đã được sản xuất.

Tôi cấu hình env / prod.rb như thế này:

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

và bây giờ tôi gặp lỗi này khi tôi cố gắng tạo Người dùng:

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'

Câu trả lời:


243

Bạn cần thêm cái này vào environment.rb

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

Hãy chắc chắn rằng bạn thay đổi hosturl sản xuất của bạn và giữ cho localhost để phát triển. Cái này dành cho người gửi thư, nó cần một email mặc định để gửi các thông báo như xác nhận, v.v ...


Bạn nên kiểm tra nhật ký trên máy chủ heroku heroku logschạy từ bảng điều khiển và nó sẽ cho bạn biết chính xác lỗi.

Khi bạn đẩy lên heroku, bạn cần định cấu hình environment.rbtệp với tên miền phụ heroku:

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

Tùy thuộc vào phiên bản, điều này nên đi vào production.rb, không environment.rb.


Chào sam! Tôi xin lỗi nhưng tôi đã không nhận được nó. Tôi chỉ cần thêm dòng config.action_mailer.default_url_options = {: host => 'localhost'} trong env.rb của tôi nhưng ứng dụng rails 3 của tôi gặp sự cố trên heroku. Tôi có phải đặt cái gì đó lên env / prod.rb không? (xin lỗi, tiếng Anh của tôi rất bình thường ..)
benoitr

Ngoài ra, tôi có phải đặt ứng dụng rails của mình ở chế độ sản xuất không? Cảm ơn!
benoitr

1
:host => 'yourapp.heroku.com' đây phải là miền của bạn Ví dụ: nếu tên miền của bạn là yahoo.com, thì nó sẽ là yahoo.heroku.comhoặc nếu bạn đã thiết lập tên miền tùy chỉnh thì đó sẽ chỉ là url của bạnyahoo.com
sau đó,

1
Cảm ơn Sam, tôi tìm ra giải pháp. Thực tế là tôi đã không có addon sendgrid và smtp của tôi chưa được cấu hình. Rất cám ơn cho tất cả các bản sao lưu của bạn!
benoitr

1
Nó sẽ không như vậy config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', trái ngược với chỉ config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
maudulus

37

Đồng ý,

Trước tiên, bạn phải cài đặt đá quý sendgrid với dòng lệnh này:

heroku addons:add sendgrid:free

Sau đó, bạn chỉ cần cấu hình env / dev.rb và env / prod.rb của bạn như thế này:

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

Đẩy vào git và heroku. Nó nên hoạt động ..


Tôi gặp lỗi này khi tham chiếu config.action_mailer trong sản xuất.rb: /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configure.rb: 77: in method_missing': undefined method action_mailer 'cho # <Rails :: Application :: Cấu hình: 0x0000000241f760> (NoMethodError)
Laran Evans

Tôi không chắc mình có thể giúp gì ở đây ... Bạn có tham khảo nó trong khối không? (Trang web :: Application. Thông minh làm ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... end)
benoitr

6
bây giờ lệnh sendgrid là addon heroku: add sendgrid: starter (xem chi tiết sử dụng tại devcenter.heroku.com/articles/sendgrid )
Danny

23

Anwser của Codeglot ở trên thực hiện công việc, nhưng chúng tôi muốn thứ gì đó linh hoạt hơn một chút, vì vậy chúng tôi đã làm điều này:

Trên Heroku, chúng tôi chạy nhiều môi trường Sản xuất để dàn dựng và thử nghiệm, vì vậy chúng tôi cần một giải pháp linh hoạt cho tệp môi trường sản xuất.rb.

Trong sản xuất.rb

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

Sau đó, đặt biến môi trường MAILER_URL cho ứng dụng của bạn như vậy

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

18

Nếu bạn đang chạy trên Cedar :

  1. chạy heroku addons:add sendgrid:freetừ bảng điều khiển của bạn.

  2. Thêm các dòng sau vào config/environments/production.rbtrong ứng dụng của bạn.

.

  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

Tôi đã phải làm một số điều để làm cho nó hoạt động trong môi trường sản xuất : Bên trong production.rbtệp của tôi (/config/envirments/production.rb) Tôi đã thêm vào như sau:

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"

Đây là với Rails 4Devise 3


1
Cấu trúc này default_url_optionsgây ra lỗi khiến tài sản tiền biên dịch của tôi không thành công, chỉ là fyi. Khi tôi thay đổi nó trở lại thành `= {host: 'myappsname.herokuapp.com'}` nó đã hoạt động.
Liz

0

Công việc sau rất nhiều nghiên cứu,

  1. Đừng quên thêm mặc định từ: địa chỉ thư trong ApplicationMailer của bạn (application_mailer.rb) là,

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
  2. Thêm cấu hình dưới đây trong bạn 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. Bật IMAP từ cài đặt Gmail của bạn trong tab Chuyển tiếp IMAP / POP .

  4. Cho phép các ứng dụng kém an toàn hơn: BẬT từ https://myaccount.google.com/lesssecurur xuất hiện lại

Bây giờ bạn tốt để đi. :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.