2012-11-08 3 views
1

Ruby/Rack 앱과 SOAP 용 Savon gem 및 요청/응답 용 HTTPI gem을 사용하여 방화벽 뒤의 DMZ에있는 SOAP API에 연결하려고합니다.Heroku의 호스트 파일

SOAP API는 방화벽 뒤에있는 내부 도메인 이름 (예 : "http : // randomhostname/path/to/wsdl")을 가리키는 wsdl 파일을 정의하며 ip를 호스트 이름으로 정의하면 올바르게 작동합니다 내 컴퓨터의 로컬 (1.1.1.1 randomhostname)에있는/etc/hosts 파일에 있습니다.

내가 만난 문제는 내 앱의 프로덕션 환경이 Heroku에서 실행된다는 것입니다. Heroku 또는 응용 프로그램의 wsdl에 정의 된 호스트 이름으로 연결하려는 서버의 외부 IP를 매핑하는 방법은 무엇입니까?

답변

0

WSDL을 사용하지 마십시오. 함수를 직접 호출하십시오. 이와 같이 :

 
#!ruby 

require 'savon' 

stock_handle = ARGV[0] || 'OTEX' 

client = Savon::Client.new do 
    wsdl.endpoint = 'http://www.webservicex.net/stockquote.asmx' 
    wsdl.namespace = 'http://www.webserviceX.NET/' 
end 

response = client.request :wsdl, 'GetQuote' do 
    http.headers["SOAPAction"] = '"http://www.webserviceX.NET/GetQuote"' 
    soap.body = { "symbol" => stock_handle } 
end 

print response 
+0

이 작업은 실제로 서버의 IP를 Savon 구성 설정에서 http.proxy로 지정하여 연결할 수도 있었지만 이상적이라고 생각하지 않습니다. – Incomethax

+0

Savon :: Client를 만들 때마다 WSDL을 구문 분석하기 때문에 프로덕션 코드에 WDSL 버전을 사용하지 않습니다. 나는 그것이 성능 단점이라고 생각하지만 실제로 측정하지는 못했다. –