2013-04-23 1 views
0

디렉토리에서 정적 자산을 제공하는 Rails 앱에 Sinatra 앱이 있습니다. 이 앱은 다음과 같이 레일 경로에 장착 :이 로컬로이 씬을 사용하여, 잘 작동 실행하지만, 언제 내 테스트 서버에서 (Nginx에/승객을)를 실행할 때Sinatra 정적 자산 비어 있음

mount BeanstalkdView::Server, :at => "/beanstalk"

정적 자산 행동 이상한. 정적 파일에 대한 요청은 200 OK를 반환하지만 내용은 없습니다.

내 정적 파일은 set :public_folder, "#{root}/resources"을 통해 Sinatra에게 알려주고 템플릿에는 정적 파일을로드합니다. #{request.env['SCRIPT_NAME']}/css/file.css의 CSS 파일 두 경로가 모두 올바른지 확인했습니다.

+0

개발자 도구를 열면 넷 탭에서 오류가 발생합니까? – Simpleton

+0

아니요, 상태는 200입니다. – TTT

답변

2

알렉세이 브이의 대답이 나를 많이 도와주었습니다. 결국 나는 production.rb에 Nginx에 대한 적절한 설정을 사용하여이 고정 :

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

당신이 당신의 레일 앱의 Nginx를 다시 시작하고 파일을 얻을 수 있도록 브라우저에서 새로 고침을해야합니다.

자세한 내용은 체크 아웃 : http://jimneath.org/2011/04/05/rails-3-nginx-and-send_file.html.

3

실제 운영 환경에서는 Rails 3.0.x에서 기본적으로 활성화되는 ::Rack::Sendfile 미들웨어로 인해 발생합니다 (3.1.x 이후의 모든 환경에서 기본적으로 사용 중지됨).

이 미들웨어는 간단하지만 강력합니다. :path에 응답하는 ::Rack::File 또는 ::Sinatra::StaticFile (또는 다른 객체)을 전달하면이 미들웨어는 (Apache의 경우) 또는 X-SendFile-Redirect (NGinx의 경우)을 추가하며 실제 본문을 전송하지 않습니다. 그래서 아파치 나 NGinx는 실제 파일 전송을 처리 할 것입니다. Nativex/Apache 설정을 엉망으로 만들고 싶지 않다면,이 미들웨어를 비활성화 할 수 있습니다. 찾기 및 의견 당신의 config/environments/production.rb 파일에 설정 옵션을 다음

config.action_dispatch.x_sendfile_header 

이 설정 옵션 (지정하지 않으면 아무것도하지 않음) 설정 헤더 Sendfile 미들웨어를 지시하는 데 사용됩니다.