2013-03-20 7 views
0

datanoise-actionwebservice (2.3.2)를 사용하여 SOAP 웹 서비스 API를 구현하는 단일 컨트롤러가 있습니다. 레일을 웹 애플리케이션 또는 웹 사이트로 사용하여 정적 컨텐츠를 제공하지 않습니다. 컨트롤러 코드에서 직접 Mysql.real_connect 기반 쿼리를 사용하여 순전히 웹 서비스로 실행됩니다. 이것은 Rails의 모델 부분을 사용하는 방법을 더 잘 이해하지 못했기 때문에 발생하지만, 실제로는 쿼리가 복잡하고 코딩하기가 쉽기 때문에 더욱 실제적입니다.동시 요청을 지원하기 위해 Rails 2.3.5/Ruby 1.8.7에 웹 서비스를 배포하는 방법

이 웹 서비스는 SOAP 웹 서비스 호출을 다른 레거시 서비스로 만들고 Windows 기반 웹 서비스 클라이언트 응용 프로그램에 다시 응답합니다.

필자는 지금까지 여러 개의 터미널에서 내 API에 대한 다중 호출을 처리하기 위해 기본 mongrel 서버를 사용했지만 분명히 mongrel을 클러스터로 재배포하거나 여객과 같은 다른 설정을 사용하여 응답 시간을 향상시켜야합니다. 고객. 나는이 접근법이나 비슷한 접근법을 달성하기위한 간단한 HOWTO를 찾을 수 없다. 대부분 웹 사이트/웹 애플리케이션으로 사용하는데, 아파치 등등은 staty 내용과 CSS 등을 루비 부분과 함께 제공해야한다.

누구나 내가 여러 웹 서비스 호출을 동시에 처리하고 컨트롤러에서 처리하고 응답하도록 클러스터를 설정할 수있는 리소스를 알려줄 수 있습니까? 레일스는 각 웹 서비스 요청에 대한 컨트롤러를 자동으로 인스턴스화하여 병렬 처리를 수행합니까? 또는 사용 가능한 라이브러리를 사용하여 다시 작성해야합니까?

도움/조언을 많이 주시면 감사하겠습니다. 나는 Rails2.3.5/Ruby1.8.7에 있어야한다. 업그레이드가 이미 프로덕션에서 작동하고 있으므로 datanoise 자체가 1.8.7+ 또는 Rails 3를 좋아하지 않는 것으로 보인다. 볼 수 있습니다.

건배!

답변

1

기본적으로 하나 이상의 잡종을 실행해야합니다.

mongrel 프로세스가 백 엔드 서버가 될 것이므로 프런트 엔드로드 균형 조정 프록시를 실행해야합니다.

순수 루비 싱글 스레드 잡종의 장점은 설치가 쉽다는 것입니다. 쉬운 설정 영역을 넘어 서면 승객을 실행하는 복잡성을 처리 할 수 ​​있습니다. 승객은 내부적으로로드 밸런싱을 수행합니다.

나인 경우, 출품자가 out-of-the-box를 포함하지 않았으므로 소스에서 nginx 또는 tengine을 컴파일합니다. 이는 configure 스크립트에 인수를 추가하는 것만 큼 간단합니다.

# gem install rake rack passenger --no-rdoc --no-ri 
# exit 
$ ./configure --add-module=`passenger-config --root`/ext/nginx 
$ make 
+0

고마워 - 내 apache - passenger combo 대신 내 상황에 nginx를 권하는 이유는 무엇입니까? 필자의 질문은 웹 서비스 요청이 동시에 올 때 레일스 컨트롤러를 트리거하는 방법이 무엇인가하는 것입니다. 컨트롤러에 의해 액세스되는 Rails/lib 디렉터리에있는 Singleton 클래스가 있습니다. 승객이 들어오는 요청마다 하나의 컨트롤러를 인스턴스화하지만 공통 로그뿐만 아니라 Singleton의 동일한 뷰를 계속 공유하게됩니까? – Surge

+0

다른 Unix 프로세스에서 Ruby 인터프리터의 사본을 실행합니다. DB를 통하지 않고는 다른 요청 스레드와 상호 작용할 수 없습니다. 하지만 상태를 유지할 수없는 웹 서버가 커지거나 크래시가 발생하면 다시 시작할 수 있기 때문에 원하는 방식입니다. 승객과 함께, 이것은 자동으로 일어날 것입니다, 잡종과 함께, 당신은 monit, god 또는 foreman과 같은 외부 프로세스 모니터가 필요합니다. – DigitalRoss