2014-04-18 3 views
1

Windows 서버에 Rails 애플리케이션을 설치 한 것은 이번이 처음입니다. Helicon Zoo를 사용하여 Windows Server 2008 컴퓨터에서 레일 응용 프로그램을 설치했습니다. 시간이 좀 걸렸지 만 전체 응용 프로그램이 거의 완벽하게 실행되었습니다.레일스 send_file이 400mb보다 큰 파일로 작동하지 않습니다.

내 문제는 400MB 이상의 파일을 다운로드 중입니다.

응용 프로그램/컨트롤러/hosted_files_controller.rb

class HostedFilesController < ApplicationController 
    before_filter :authenticate_user! 
    around_filter :catch_not_foun 

    def download 
    @footprint = UserAbility.new(current_user).footprints.find(params[:id]) 
    send_file path 
    end 

    private 

    def path 
     if @footprint.subpath? 
     @path = "#{HOSTED_FILES_PATH}\\#{@footprint.subpath}\\#{@footprint.filename}" 
     else 
     @path = "#{HOSTED_FILES_PATH}\\#{@footprint.filename}" 
     end 
    end 

    def catch_not_found 
     yield 
    rescue ActiveRecord::RecordNotFound 
     recover_and_log "We couldn't find that record.", "No record found using the id (#{params[:id]})" 
    rescue ActionController::MissingFile 
     recover_and_log "We couldn't find the file on our server.", "The file was not found at the following path: #{@path}" 
    end 

    def recover_and_log (displayed, logged) 
     logger.info "!!! Error: #{logged}" 
     redirect_to root_url, alert: displayed 
    end 
end 

내가 config.action_dispatch.x_sendfile_header이 주석 한 내 레일 응용 프로그램에서

본인은 클라이언트에게 파일을 전송하려면 다음을 사용하십시오 내가 Apache 나 Nginx를 사용하지 않기 때문에 production.rb 파일에서.

이 기능은 서버에서 ~ 400MB 미만의 모든 파일에 유용합니다. 내가 그 위에 도착 후, 나는 다음과 같은 말한다 헬리 동물원에서 500 내부 서버 오류 :

Helicon Zoo module has caught up an error. Please see the details below. 
Worker Status 
The process was created 
Windows error 
The pipe has been ended. (ERROR CODE: 109) 
Internal module error 
message: ZooApplication backend read Error. 
type: ZooException 
file: Jobs\JobBase.cpp 
line: 566 
version: 3.1.98.508 
STDERR 
Empty stderr 

사람이 무슨 일이 일어나고 있는지 어떤 생각을 가지고 있습니까? 나는 잃어 버렸다.

나는 시도했다 :

  • 변화 (작동하지 않았다)
  • 응용 프로그램 풀에 대한 IIS에서 메모리 설정에 놀러 (작동하지 않았다) send_file에 BUFFER_SIZE를 증가 X-sendfile을하고 X-가속 - 리디렉션에 x_sendfile_header 내가 윈도우 서버에 아파치를 설치하려고 고려하고 아팍에 파일을 전송 오프로드하기 위해 x_sendfile_header을 사용하고

을 (작동하지 않았다) 그는,하지만 나는 이미 (거의) 작동하는 응용 프로그램을 망쳐 두려워.

누구에게이 문제를 해결할 수있는 아이디어가 있습니까?

+0

레일 위의 루비 문제가 아닙니다. 귀하의 응용 프로그램/웹 서버에 문제가 있습니다. 데이터 보내기 제한이 있으므로 nginx처럼 당신은 클라이언트 최대 몸 크기를 지정할 수 있습니다. –

답변

0

Helicon Zoo의 현재 버전에서는 기본적으로 Ruby 응용 프로그램이 FastCGI Ruby Rack 커넥터로 설치됩니다. FastCGI 프로토콜은 차단 프로토콜이므로 요청 제한 시간이나 요청 최대 크기에 대한 몇 가지 제한 사항이있을 수 있습니다. 대용량 파일을 보내야하는 경우 대신 "Ruby 1.9 Rack over HTTP"링크를 사용하는 것이 좋습니다. 나는 당신이 Ruby on Rails (2.3.x and 3.x.x) 지시를 따라 왔다고 가정합니다. 지금 바로 실행처럼 Ruby Rack over HTTP with Thin 명령에서 추가 단계를 수행 "보석은 얇은 설치"다음 명령 및 편집의 Web.config 같이 이미 헬리 제품을 사용하기 때문에

In the < handlers> section comment out two lines that follows 

< !-- Ruby 1.9 over FastCGI --> 

Uncomment two lines that follows 
< !-- Ruby 1.9 over HTTP, using Thin as a back-end application server --> 
In the <environmentVariables> section uncomment line 
< !-- Use this APP_WORKER with HTTP Ruby engine and Thin. Thin need to be installed. 
< add name="APP_WORKER" value="GEM_HOME\bin\thin start" /> 

또 다른 해결책은,에 대한 지원을 제공 Helicon Ape를 설치하는 것 X-Sendfile HTTP header (see documentation) 헤더는 Apache와 동일하며 서버 당 여러 사이트에 대해 무료입니다. 이 솔루션은 낮은 수준의 WinHTTP 코드가 데이터를 보내는 데 사용되므로 서버로드가 줄어들고 응답 속도가 빨라지므로 훨씬 좋습니다.

+0

팁 주셔서 감사합니다. 불행히도 이러한 변화를 시도하기 위해 다른 도시로 통근해야하지만, 곧 그 일을하게 될 것입니다.질문 : Helicon Ape 경로를 방문한 경우 IIS와 함께 Apache를 사용합니까, 아니면이 응용 프로그램을 Apache로 마이그레이션할까요? – CaptCheech

+0

Helicon Ape는 Apache를 전혀 사용하지 않습니다. 이것은 처음부터 작성된 기본 IIS 7 모듈로, IIS 내부의 모든 인기있는 Apache 모듈을 구현합니다. 이것은 * nix와 호환 될 필요가 없기 때문에 Windows의 힘을 사용하는 IIS 전용 솔루션입니다. – Yaroslav

+0

니스. 좋은 설명. 그래서 Helicon Ape를 설치했는데 이제 매개 변수가 내 레일 앱에 전달되는 데 문제가있는 것처럼 보입니다./admin/user_info? id = 1과 같은 경로를 방문하면 레일즈 앱은 params [: id]가 nil이됩니다. 이것은 Helicon Ape가 설치된 경우에만 발생하는 것으로 보입니다. 제거 할 때 같은 경로가 정상적으로 작동합니다. 이것에 대한 아이디어가 있습니까? 필자는 Helicon Ape를 설치하고 .htaccess 파일에 XSendFile On을 추가하는 것 이상의 작업을 수행해야한다고 생각합니다. – CaptCheech

관련 문제