복붙노트

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

RUBY-ON-RAILS

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

지금은 약 90 분 동안 인터넷 검색을 한 여전히이에 대한 답변이 없습니다. 어디 default_url_options을 설정합니까? config.action_mailer.default_url_options 다른 곳에서이 같은 버그를 해결하기 위해 나는 이미 설정 한하지만, RSpec에 사양 내부 URL 도우미를 사용하려고 할 때 지금은이 오류를 받고 있어요. 나는 default_url_options이 설정 될 것으로 예상있어 아무 생각이 없습니다.

 Failure/Error: listing_url(listing).should match(/\/\d+-\w+$/)
 RuntimeError:
   Missing host to link to! Please provide :host parameter or set default_url_options[:host]
 # ./spec/routing/listing_routing_spec.rb:9:in `block (3 levels) in <top (required)>'

이 코드는 이메일과 아무 상관이 / ActionMailer, 그냥 대신 경로의 URL을 필요로 발생합니다.

어떤 아이디어?

해결법

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

    1.당신은 모든 환경에서 다음 줄을 추가해야합니다 :

    당신은 모든 환경에서 다음 줄을 추가해야합니다 :

    config.action_mailer.default_url_options = {: 호스트 => "YOURHOST"}

    그런 식으로, 모든 환경에서 작동 할 수 있으며 환경에 대한 환경 다를 수 있습니다. 예를 들면 :

    development.rb

    config.action_mailer.default_url_options = { :host => "dev.yourhost.com" }
    

    test.rb

    config.action_mailer.default_url_options = { :host => "test.yourhost.com" }
    

    production.rb

    config.action_mailer.default_url_options = { :host => "www.yourhost.com" }
    
  2. ==============================

    2.

    Your::Application.routes.draw do
      default_url_options :host => "example.com"
    
      # ... snip ...
    end
    

    routes.rb : 어딘가에

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

    3.호스트는 각 환경의 설정 파일에 지정해야합니다. 예 :

    호스트는 각 환경의 설정 파일에 지정해야합니다. 예 :

    config/environments/development.rb
    

    이 질문에이 질문을 참조하십시오.

  4. ==============================

    4.환경 파일의 각 (예를 들어 development.rb, production.rb 등)에서는 action_mailer에 사용할 default_url_options를 지정할 수 있습니다 :

    환경 파일의 각 (예를 들어 development.rb, production.rb 등)에서는 action_mailer에 사용할 default_url_options를 지정할 수 있습니다 :

    config.action_mailer.default_url_options = { host: 'lvh.me', port: '3000' }
    

    그러나 이러한 MyApp를 설정되지 않습니다 Application.default_url_options :

    $ MyApp::Application.config.action_mailer.default_url_options
    #=> {:host=>"lvh.me", :port=>"3000"}
    
    $ MyApp::Application.default_url_options
    #=> {}
    

    당신이 ActionMailer의 아무것도 외부에서 해당 오류가 발생하는 이유입니다.

    당신은 당신이 적절한 환경 파일 (development.rb, production.rb 등)에 action_mailer에 정의 된 것을 사용하도록 응용 프로그램의 default_url_options을 설정할 수 있습니다.

    당신은 한 번만 수행 할 수 있도록 가능한 한 드라이로 일을 계속하려면 설정 / environment.rb에 파일에서이 작업을 수행 :

    # Initialize the rails application
    MyApp::Application.initialize!
    
    # Set the default host and port to be the same as Action Mailer.
    MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options
    

    앱을 부팅 자 할 때, 전체 응용 프로그램의 default_url_options은 action_mailer.default_url_options 일치합니다 :

    $ MyApp::Application.config.action_mailer.default_url_options
    #=> {:host=>"lvh.me", :port=>"3000"}
    
    $ MyApp::Application.default_url_options
    #=> {:host=>"lvh.me", :port=>"3000"}
    

    이 경로를 날 실망 선도를위한 @pduersteler에서 모자 팁.

  5. ==============================

    5.당신은 전체 URL이 반환됩니다 모든 listing_url 방법 (안 정상으로 상대를) 사용하는 경우. 레일, 호스트 당신을 요구하고 전체 URL을 계산하는 이유입니다.

    당신은 전체 URL이 반환됩니다 모든 listing_url 방법 (안 정상으로 상대를) 사용하는 경우. 레일, 호스트 당신을 요구하고 전체 URL을 계산하는 이유입니다.

    호스트는 어떻게 말할 수있는 레일? 당신은 여러 가지 방법으로 그것을 할 수 있습니다 :

    각 환경이 옵션을 1.Adding :

    [/config/development.rb]
    config.action_mailer.default_url_options = { host: "localhost:3000" }
    [/config/test.rb]
    config.action_mailer.default_url_options = { host: "localhost:3000" }
    [/config/production.rb]
    config.action_mailer.default_url_options = { host: "www.example.com" }
    

    참고 :이 엔진은 엔진 테스트 내부 사용자의 더미 앱 동일한 기능을 수행 할 기억 레일 내부에서 작업중인 경우 path_to_your_engine / 테스트 / 더미 / 설정 / 환경 / * 당신이 엔진을 테스트 할 때에 테스트 무엇 레일 때문에.

    이 같은 foo_url 방법에 호스트 옵션을 2.Add :

    listing_url(listing, host: request.host) # => 'http://localhost:3000/listings/1'
    

    3.Not 출력 옵션을 사용하여 호스트 : only_path true로.

    listing_url(listing, only_path: true ) # => '/listings/1'   
    

    이 경우에 나는 listing_path 방법을 사용하기 때문에 이럴 나는이 일에 점을 보지 않는다

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

    6.재미있는 것은, config.action_mailer.default_url_options을 설정하는 것은 나에게 도움이되지 않는다는 것을. 또한, 장소의 환경에 독립적 인 설정으로 장난 나는 그렇지처럼 속해 나에게 만족하지 받았습니다. 또한, 나는 sidekiq / resque 근로자의 URL을 생성 할 때 작동하는 솔루션을 원했다.

    재미있는 것은, config.action_mailer.default_url_options을 설정하는 것은 나에게 도움이되지 않는다는 것을. 또한, 장소의 환경에 독립적 인 설정으로 장난 나는 그렇지처럼 속해 나에게 만족하지 받았습니다. 또한, 나는 sidekiq / resque 근로자의 URL을 생성 할 때 작동하는 솔루션을 원했다.

    설정 / 환경 / {개발, 생산} .rb로 전환, 지금까지 나의 접근 방식 :

    MyApp::Application.configure do
        # Stuff omitted...
    
        config.action_mailer.default_url_options = {
          # Set things here as usual
        }
    end
    
    MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options
    

    레일> = 3.2.x.에서 나를 위해이 작품

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

    7.Rails.application.routes.default_url_options [: 호스트] = '로컬 호스트 3000'

    Rails.application.routes.default_url_options [: 호스트] = '로컬 호스트 3000'

    development.tb / test.tb에서 다음과 같이 더 간결 수 있습니다 :

    Rails.application.configure do
      # ... other config ...
    
      routes.default_url_options[:host] = 'localhost:3000'
    end
    
  8. ==============================

    8.당신은 항상 URL 도우미에 매개 변수로 호스트를 전달할 수 있습니다 :

    당신은 항상 URL 도우미에 매개 변수로 호스트를 전달할 수 있습니다 :

    listing_url(listing, host: request.host)
    
  9. ==============================

    9.당신은 응용 프로그램 컨트롤러의 기본 URL 옵션을 설정할 수 있습니다 :

    당신은 응용 프로그램 컨트롤러의 기본 URL 옵션을 설정할 수 있습니다 :

    class ApplicationController < ActionController::Base
      def default_url_options
        {:locale => I18n.locale}
      end
    end
    

    http://guides.rubyonrails.org/action_controller_overview.html#default_url_options

  10. ==============================

    10.나는이 같은 오류가 발생했다. 나는 모든 튜토리얼에서 목록 10.13을 포함하여, 정확하게 작성했다.

    나는이 같은 오류가 발생했다. 나는 모든 튜토리얼에서 목록 10.13을 포함하여, 정확하게 작성했다.

    Rails.application.configure do
    .
    .
    .
    config.action_mailer.raise_delivery_errors = true
    config.action_mailer.delevery_method :test
    host = 'example.com'
    config.action_mailer.default_url_options = { host: host }
    .
    .
    .
    end
    

    분명히하여 'example.com "내 서버 URL로 대체.

    내가 튜토리얼을 통해 호도했던 어떤이 줄을이었다 :

    나에 대한 대답은 다시에 오프 서버와 다시 켜 그래서.

  11. ==============================

    11.에 설정 / 환경 / test.rb 이동

    에 설정 / 환경 / test.rb 이동

    Rails.application.routes.default_url_options [: 호스트] = '로컬 호스트 3000'

  12. ==============================

    12.하지만 올바른 해결책이 아닙니다 경로에 DEFAULT_URL 추가, 일부 경우에 작동합니다.

    하지만 올바른 해결책이 아닙니다 경로에 DEFAULT_URL 추가, 일부 경우에 작동합니다.

    각 환경 (개발, 테스트, 생산)에서 DEFAULT_URL을 설정했습니다.

    이러한 변경을 할 필요가있다.

        config/environments/development.rb
         config.action_mailer.default_url_options = 
          { :host => 'your-host-name' }  #if it is local then 'localhost:3000'
    
     config/environments/test.rb
          config.action_mailer.default_url_options = 
          { :host => 'your-host-name' }  #if it is local then 'localhost:3000'
    
      config/environments/development.rb
         config.action_mailer.default_url_options = 
          { :host => 'your-host-name' }  #if it is local then 'localhost:3000'
    
  13. ==============================

    13.다만 만일 누군가가 ActiveStorage 관련된 에러에 대한,이 검색은 발견 :

    다만 만일 누군가가 ActiveStorage 관련된 에러에 대한,이 검색은 발견 :

    당신은 당신이 업로드-URL을 등 로컬 디스크 서비스 (대부분 테스트 환경에서)를 생성하고자하는 컨트롤러 액션이있는 경우, 당신은 ActiveStorage을 포함해야 :: 컨트롤러의에서 setCurrent 작업에 blob.service_url_for_direct_upload을 허용하기 위해 바르게.

  14. ==============================

    14.나는 같은으로 environment.rb를 구성하여 문제를 해결

    나는 같은으로 environment.rb를 구성하여 문제를 해결

    YourApp :: Application.default_url_options = YourApp :: Application.config.action_mailer.default_url_options

    당신은, 개발 등 각 환경에 대해 액션 메일러에 대한 설정 default_url_options에 등 시험 준비 및 생산이 필요

    참고 : 링크에 호스트를 누락! 제공 사항 : 호스트 매개 변수 또는 설정 default_url_options [: 호스트]

  15. from https://stackoverflow.com/questions/7219732/missing-host-to-link-to-please-provide-host-parameter-or-set-default-url-optio by cc-by-sa and MIT license