Heroku / devise-연결할 호스트가 없습니다! : host 매개 변수를 제공하거나 default_url_options [: host]를 설정하십시오


178

heroku에서 내 앱을 푸시하려고합니다. 나는 여전히 dev에 있습니다. 확인 가능한 모듈로 고안을 사용합니다.

heroku 콘솔로 사용자를 추가하려고 할 때이 오류가 발생했습니다.

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

테스트 및 개발 환경에서 다음 줄이 있습니다.

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가 아님).

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 logs콘솔에서 로그를 실행하는 heroku 서버의 로그를 확인해야 하며 정확한 오류를 알려줍니다.

heroku로 푸시 할 때 environment.rbheroku 하위 도메인으로 파일 을 구성해야합니다 .

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

버전에 따라이에 가야 production.rb하지 environment.rb.


안녕 샘! 미안하지만 얻지 못했습니다. env.rb에 config.action_mailer.default_url_options = {: host => 'localhost'} 줄을 추가하지만 herku에서 rails 3 앱이 충돌합니다. env / prod.rb에도 무언가를 넣어야합니까? (미안하지만 내 영어는 너무 so ..)
benoitr

또한 Rails 앱을 프로덕션 모드로 두어야합니까? 감사!
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' }

자식과 heroku를 밀어 넣습니다. 작동해야합니다 ..


production.rb에서 config.action_mailer를 참조하면이 오류가 발생합니다 : /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb : 77 : in method_missing': undefined method # <Rails : : Application :: Configuration : 0x0000000241f760>에 대한 action_mailer '(NoMethodError)
Laran Evans 님이

내가 여기서 도울 수 있을지 모르겠다 ... 블록 안에서 그것을 참조 했는가? (웹 사이트 : Application.configure 할 ... config.action_mailer.default_url_options = {: 호스트 => 'yourapp.heroku.com'} ... 끝)
benoitr

6
이제 sendgrid 명령은 heroku addons : add sendgrid : starter입니다 ( devcenter.heroku.com/articles/sendgrid 에서 사용법 세부 사항보기 )
Danny

24

위의 Codeglot의 답변은 작업을 수행하지만 좀 더 유연한 것을 원했기 때문에 다음과 같이했습니다.

Heroku에서는 준비 및 테스트를 위해 여러 프로덕션 환경을 실행하므로 production.rb 환경 파일을위한 유연한 솔루션이 필요합니다.

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/environments/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 4Devise 3입니다


1
이 구조로 default_url_options인해 오류가 발생하여 사전 컴파일 자산이 실패했습니다. 다시`= {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 / POP 전달 탭 의 Gmail 설정에서 IMAP을 활성화 하십시오.

  4. 보안 수준이 낮은 앱 허용 : ON을 에서 https://myaccount.google.com/lesssecureapps

당신은 이제 가야합니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.