복붙노트

[RUBY-ON-RAILS] 하위 도메인에 카피 바라 - default_host를

RUBY-ON-RAILS

하위 도메인에 카피 바라 - default_host를

내가 사용의 하위 도메인 데이터베이스 (멀티 테넌시 (multi-tenancy)를) 전환 할 것을 응용 프로그램을 가지고있다. 나는 통합 테스트 카피 바라를 사용하기 위해 노력하고있어, 그것은 정말 하위 도메인에 많이 의존한다.

나의 이해는 Capybara.default_host를 설정하면 내 모든 요청이 호스트에서 온 만들 것 뭔가 =이었다. 이 경우 될 것 같지 않습니다. 이 게시물에서, 저자는 호스트와 명시 적 URL을 방문하는 것이 좋습니다,하지만 난 여기 저기를 탐색하고있어 경우이 조금 성가신된다. 난 그냥 다음, 호스트를 설정 예상대로 내 레일 패스를 사용할 수 있도록하고 싶습니다. 확실하지 내가 잘못을하고 있지만, 여기에 내가 무엇을 시도했다입니다하고있어 :

# spec_helper.rb
RSpec.configure do |config|
  config.before(:each, :type => :request) do
    Capybara.default_host = 'http://app.mydomain.com'
  end
end

# in some_integration_spec.rb
before do
  puts "Capybara.default_host: #{Capybara.default_host}"
  puts "some_app_url: #{some_app_url}"
end

이것은 출력을 산출한다 :

Capybara.default_host: http://app.mydomain.com
some_app_url: http://www.example.com/some_path

내가 도대체 ​​뭘 잘못하고있는 겁니까? default_host에는 아무것도 할 것으로 보인다. 내가 말할 때, 나는이 매번 성가신 비트의로 방문 (Capybara.default_host +의 some_app_path) 말을하고 싶지 않아요. 왜 다른 사람이 default_host에 옵션이 존재합니까?

해결법

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

    1.나는 확실히 default_host에의 사용 용도 아니지만, app_host 당신이 필요하지 않습니다. 내가 발견 한 I 레일 세션 방법 호스트를 호출하는 첫번째 필요! 요청 객체의 컨트롤러에 전달됩니다 호스트 문자열을 설정하기 위해서이다.

    나는 확실히 default_host에의 사용 용도 아니지만, app_host 당신이 필요하지 않습니다. 내가 발견 한 I 레일 세션 방법 호스트를 호출하는 첫번째 필요! 요청 객체의 컨트롤러에 전달됩니다 호스트 문자열을 설정하기 위해서이다.

    그럼 당신은 대신 과정에서 전화를 걸의 웹 서버를 통해 응용 프로그램을 호출하는 카피 바라에게 Capybara.app_host를 설정해야합니다. 당신이 그하지 않으면이 리디렉션을 발견하고 두 번째 요청의 호스트 정보를 떨어질 때 카피 바라 밖으로 가발.

    나는이 자동으로 사물의 레일 요청 끝 알아서하지 않도록 왜 안 해요,하지만 난 명시 적으로 두 곳에서 호스트를 설정하지 않은 경우, 나는이 일치하지 않는 결과를 얻을 것으로 나타났습니다.

    def set_host (host)
      host! host
      Capybara.app_host = "http://" + host
    end
    
    before(:each) do
      set_host "lvh.me:3000"
    end
    

    그럼 그냥 액세스 페이지에 대한 상대 경로를 사용할 수 있습니다.

    최신 정보:

    카피 바라 2.x 및 카피 바라 수용 테스트를 실행하기위한 RSpec에-레일 2.12.0 도입 "기능"사양. RSpec에 레일의 새로운 FeatureExampleGroup 모듈은 RequestExampleGroup 다른 더 이상 랙 테스트 호스트에 액세스 할 수 있습니다! 방법. 지금 당신은 대신 default_url_options를 사용하려면 :

    def set_host (host)
      # host! host
      default_url_options[:host] = host
      Capybara.app_host = "http://" + host
    end
    
  2. ==============================

    2.당신은 하위 도메인을 포함하도록 URL을 변경해야하는 경우, 당신은 당신의 단계 정의에 app_host을 지정할 수 있습니다. 이 127.0.0.1을 가리키는 이후 lvh.me 같은 도메인을 사용합니다 :

    당신은 하위 도메인을 포함하도록 URL을 변경해야하는 경우, 당신은 당신의 단계 정의에 app_host을 지정할 수 있습니다. 이 127.0.0.1을 가리키는 이후 lvh.me 같은 도메인을 사용합니다 :

    Capybara.app_host = "http://#{subdomain}.lvh.me"
    

    카피 바라를 사용하면 포트 80에서 실행되는 원격 서버를 테스트하고 있다는 app_host를 지정하고 있지만 우리의 경우, 우리는 카피 바라가 지정한 임의의 포트에서 실행되는 로컬 응용 프로그램을 테스트 할 때 가정합니다. 이 문제를 해결하려면 env.rb 파일에이 줄을 추가합니다 :

    Capybara.always_include_port = true
    

    지금 당신은 당신의 응용 프로그램의 페이지를 방문 할 때 ...

    visit '/page'
    

    ... URL은 하위 도메인뿐만 아니라 응용 프로그램이 실행되고있는 포트를 지정합니다.

    참고 :이 카피 바라 2.0.2을 사용하여 날 위해 일했습니다.

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

    3.이 사람은 여기에 정답이 있습니다 :

    이 사람은 여기에 정답이 있습니다 :

    http://zurb.com/forrst/posts/Testing_Subdomains_in_Capybara-g4M

    당신은하고 싶은

    Capybara.current_session.driver.reset!
    Capybara.default_host = 'http://app.mydomain.com'
    
  4. ==============================

    4.현재:

    현재:

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

    5.이 정확히 같은 상황은 아니지만이 어떤 사람들을 도움이 될 수 있습니다 :

    이 정확히 같은 상황은 아니지만이 어떤 사람들을 도움이 될 수 있습니다 :

    내 현재 프로젝트를 위해, 나는 여러 하위 도메인과 펑를 사용하고 있습니다. 테스트 스위트는 다른 포트를에 실행한다.

    이 솔루션은 실행중인 카피 바라의 버전에 따라 달라집니다.

    현재 최신 버전을 위해 나는 custom_env.rb이를 넣어 :

    Capybara.server_host = 'myapp.dev'
    Capybara.server_port = 9887
    Capybara.run_server = true
    
    # I don't remember what this was for. Another team member wrote this part...
    module ActionDispatch
      module Integration #:nodoc:
        class Session
          def host
            [Capybara.server_host, Capybara.server_port].join(':')
          end
        end
      end
    end
    

    카피 바라 1.1.2로, 나는 위의 변경을해야했다 그러나 SERVER_HOST이 app_host하게 수정 lib 디렉토리 / 카피 바라 / server.rb]로이 같은 보석의 :

    def url(path)
      ..
      if path =~ /^http/
        path
      else
        # Was this (Capybara.app_host || "http://#{host}:#{port}") + path.to_s
        (Capybara.app_host || "http://#{host}") + ":#{port}" + path.to_s
      end
    end
    
  6. from https://stackoverflow.com/questions/6536503/capybara-with-subdomains-default-host by cc-by-sa and MIT license