복붙노트

[RUBY-ON-RAILS] Heroku가 / 유증 - 링크에 호스트를 누락! 제공 사항 : 호스트 매개 변수 또는 설정 default_url_options [: 호스트]

RUBY-ON-RAILS

Heroku가 / 유증 - 링크에 호스트를 누락! 제공 사항 : 호스트 매개 변수 또는 설정 default_url_options [: 호스트]

나는 Heroku가 내 응용 프로그램을 추진하려합니다. 내가 dev에 여전히입니다. 나는위한 확 모듈과 궁리를 사용합니다.

나는 Heroku가 콘솔 사용자를 추가하려고 할 때이 오류가 발생했습니다 :

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

테스트 및 디바이스 환경에서 나는 다음과 같은 라인을 가지고 :

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'

내가 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'

해결법

  1. ==============================

    1.당신은 당신의 environment.rb에이를 추가해야

    당신은 당신의 environment.rb에이를 추가해야

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

    확실히 당신은 당신의 생산 URL로 호스트를 변경하고 개발을위한 로컬 호스트를 유지 있는지 확인하십시오. 이것은는 등의 확인서 등의 통지를 보낼 기본 이메일을 필요 메일러입니다 ...

    당신은 Heroku가 서버 Heroku가 로그에 로그를 확인해야 콘솔에서 그것을 실행하고 그것은 당신에게 정확한 오류를 알려줍니다.

    당신에게 Heroku로 누르면 당신은 Heroku가 하위 도메인과 environment.rb에 파일을 구성해야합니다 :

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

    버전에 따라,이 production.rb에 가야한다, environment.rb에 없습니다.

  2. ==============================

    2.확인,

    확인,

    첫째로 당신은이 명령 줄로 sendgrid 보석을 설치해야합니다 :

    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가에 밀어 넣습니다. 그것은 작동합니다 ..

  3. ==============================

    3.위의 Codeglot의 anwser는 일을하지만, 우리가 이런 짓을 그래서 우리는 좀 더 유연하게 뭔가를 원했다 :

    위의 Codeglot의 anwser는 일을하지만, 우리가 이런 짓을 그래서 우리는 좀 더 유연하게 뭔가를 원했다 :

    우리가 production.rb 환경 파일에 대한 유연한 솔루션을 필요로하므로에게 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
    
  4. ==============================

    4.경우에 당신은 삼나무에서 실행하고 있습니다 :

    경우에 당신은 삼나무에서 실행하고 있습니다 :

    .

      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' }
    
  5. ==============================

    5.나는 프로덕션 환경에서 작업에 얻을 수있는 여러 가지를해야했다 : 내 production.rb 파일 (/config/environments/production.rb)의 내부는 나는 다음과 같은 추가 :

    나는 프로덕션 환경에서 작업에 얻을 수있는 여러 가지를해야했다 : 내 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"
    

    이 레일 4 고안 3입니다

  6. ==============================

    6.여기에 고려하는 트릭이다. 그것은 쉽게에게 Heroku에서 사용자 지정 도메인으로 서버와 환경, 변화하는 도메인을 전환 할 것입니다.

    여기에 고려하는 트릭이다. 그것은 쉽게에게 Heroku에서 사용자 지정 도메인으로 서버와 환경, 변화하는 도메인을 전환 할 것입니다.

    대신 하드 코딩 호스트 이름의 요청에서 읽을. 여기에 내가 가지고 간단한 응용 프로그램의 예입니다.

    class MyMailController < ApplicationController
      before_filter :set_host_from_request, only: [:create]
    
      ....   
    
      private
      def set_host_from_request
        ActionMailer::Base.default_url_options = { host: request.host_with_port }
      end
    end
    

    간단한 예제에서 나는 이메일에 결과가 전송되는 것을, 단 하나의 액션을 만들 수 있습니다. 당신은 항상 호스트의 이름을 저장하기 위해 제외하지 않고 application_controller.rb에 before_filter를 추가 할 수 있습니다.

    PRO :

    WITH :

    default_url_options없이 콘솔에서 수동으로 보낼 수 없습니다

    #config.action_mailer.default_url_options = { :host => 'mydomain.com' }
    $rails console
      User.invite!(email: "ceo@example.com")
    ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
    ...stacktrace
    

    당신은 내가 주를 기쁘시게 할 수 있다는 단점을 볼 수 있다면! 감사

  7. ==============================

    7.많은 연구 후 작업 하나,

    많은 연구 후 작업 하나,

    이제 갈 수 있어요. :)

  8. from https://stackoverflow.com/questions/4114835/heroku-devise-missing-host-to-link-to-please-provide-host-parameter-or-set-d by cc-by-sa and MIT license