2011-08-30 1 views
1

Rails 3.1 앱 (3.1.0.rc8)의 프로덕션 모드에 배경 이미지가 표시되지 않습니다. 나는 또한 스프로킷 2.0.0과 승객 3.0.8을 사용하고 있습니다.배경 이미지가 Rails 3.1 프로덕션에 표시되지 않습니다.

내 스타일 시트는 .scss이며 background 섹션에 image_tag ('...')를 사용합니다. 배포 할 때 자산을 미리 컴파일하고 있습니다.

내 프로덕션 서버는 하위 URI에 배포 된 응용 프로그램과 함께 Passenger와 함께 Apache2를 사용하고 있습니다. 가상 호스트는 다음과 같이 정의된다

ServerName wibble 
DocumentRoot /srv/www 
... 
RailsBaseURI /myapp 
<Directory /srv/www/myapp> 
    Options -MultiViews 
</Directory> 

응용 프로그램이 실제로/SRV/응용 프로그램/MyApp를 배포하고 나는/SRV/www /에서의 MyApp에서 심볼릭 링크를 생성 한/SRV/응용 프로그램/MyApp를/전류 /공공의.

스타일 시트가 제대로 제공되고,하지만 난 그것으로 올라오고 로고의 요소를 검사 할 때 :

url("http://wibble/assets/logo-xxx.png") 

intead의 :

url("http://wibble/myapp/assets/logo-xxx.png") 

사실 나는 URL 등을 변경하는 경우 위의 오페라에서 편집 선언을 사용하면 로고가 올바르게 표시됩니다. 이것은 제가 이미지를 올바르게 참조하고 있으며 올바르게 사전 컴파일되고 있음을 보여줍니다. 실제 스타일 시트가 좋으므로 자산을 올바로 선택해야합니다. RailsBaseURI가 URL 경로를 놓친 것처럼 보인다.

.erb, asset_path, /myapp/logo.png, myapp/logo.png를 사용하여 스타일 시트에서 모든 유형을 시도했지만 아무런 효과가 없습니다. 얇은 서버로 개발 모드에서 모두 잘 작동합니다.

도움이 될 것입니다.

답변

1

마지막으로 몇 가지 해결책을 생각해 냈습니다.

1) https://github.com/rails/sass-rails/issues/17에서 이것은 sass-rails에서 수정 될 수있는 것처럼 보입니다. 그 동안에 나는 위의 링크에 제안 된 패치 라인을 따라 원숭이 패치 헬퍼를 배치했습니다. 애셋 미리 컴파일 라인에 필요한 환경 변수를 deploy.rb으로 설정하기 만하면됩니다.

나는 모든 파일을 하나의 파일 config/initializers/gem_patches.rb에 패치합니다. 그것은 .erb 확장을 위해 스타일 시트를 변경하고, 필요없이 url(<%= asset_data_uri 'logo.png' %>)image-url('logo.png')이 작동 대체하는 CSS에 이미지를 삽입 괜찮은지 또는 경우)

module Sass 
    module Rails 
    module Helpers 
     protected 
     def public_path(asset, kind) 
     path = options[:custom][:resolver].public_path(asset, kind.pluralize) 
     path = ENV['PRODUCTION_URI'] + path if ENV['PRODUCTION_URI'] 
     path 
     end 
    end 
    end 
end 

2 :이 파일에서 I는이 방법을 패치 웅크 리기를 바꿔라.

+0

동일한 문제가 있습니다. 나는 당신의 솔루션 2를 테스트 중이며, 이것이 효과가 있기를 바랍니다. 확실하게 yourfile.css.scss를 yourfile.css.erb로 바꿉니 까? – franchez

+0

실제로 솔루션 1을 사용했지만 솔루션 2를 사용하려면 .css를 .erb로 변경하십시오. 일을 멈추게 할 때 스타일 시트가 진부하게 순수한 CSS가 아닌 경우 조심하십시오. 내가 이것을 썼을 때, CSS는 레일 스타일 시트의 표준이었다. –

0

image_tag 대신 asset_path를 사용해 보셨습니까?

뿐만 아니라, 당신의 production.rb 파일이 조심 :
config.action_dispatch.x_sendfile_header = "X-sendfile을"# 사용 'X-가속-리디렉션을'nginx를

아파치 설치와

를 들어, 그 점을 언급해야 할 수도 있습니다.

+0

감사합니다. Jon. 나는이 두 가지를 시도했지만 여전히 기쁨이 없었다. 나는 그것이 레일즈 애플리케이션의 어떤 것보다는 내 아파치/여객 셋업에있는 것이라고 생각하기 시작했다. –

1

하위 URI로 배포하는 경우 자산 파이프 라인의 CSS 파일에서 이미지를 참조하는 데 사용할 수있는 방법이 하나만 있습니다. 따라서 자산 파이프 라인에 다음과 같은 CSS가있는 경우 :

div{background: transparent url('../images/logo.png') no-repeat top left;} 

그런 다음 public/images/logo.png에 이미지를 배치하십시오. SCSS image_url 도우미를 사용하려고하면 항상 자산을 루트 ("/ assets")에 두는 것처럼 보입니다.

이미지를 공공 장소에서 이전 위치에 두지 만 로고가 제대로 만료되기 위해 다이제스트가 제공되지 않은 자산 파이프 라인에서 logo.png 파일을 가져옵니다.

+0

Jason에게 감사드립니다. 이미지를 자산 파이프 라인의 일부로 만드는 것을 막을 수 있기 때문에 해결책으로는별로 좋지 않습니다. 나는 이제/자산이 들어가는 곳을 찾아 내고 승객이 하위 URI가있는 URL을 올바르게 찾을 수있는 선행 슬래시를 제거했는지 확인하려고합니다. –

+0

[동일한 문제] (http://stackoverflow.com/questions/7293918/broken-precompiled-assets-in-rails-3-1-when-deploying-to-a-sub-uri)에 맞서 실행했습니다.) 그리고 같은 결론에 도달했다. 문제는 프리 컴파일 프로세스가 하위 URI 아래에 있다는 것을 알릴 방법이 없다는 것입니다. 물론 사전 처리 과정 중에는 일부 코드를 실행하는 레이크 일 뿐이므로 Passenger 또는 하위 URI에 대해 알지 못합니다. 고통. –