2013-08-25 11 views
8

Próbuję skonfigurować mój serwer apache do wyświetlania zasobów statycznych z mojej aplikacji rails. Próbowałem już sugerowanych konfiguracji, ale moje zasoby wciąż nie są pokazywane i kiedy próbuję uzyskać do nich bezpośredni dostęp, właśnie dostałem błąd szyny, że nie znaleziono pasującego kontrolera, ale pliki zasobów powinny być obsługiwane bezpośrednio przez Apache. My apache konfiguracja wygląda następująco:Apache nie serwer zasobów statycznych dla aplikacji szyny

<VirtualHost *:80> 
ServerName xxx 
DocumentRoot /home/xxx/test/public 
PassengerEnabled off 

<LocationMatch "^/assets/.*$"> 
Header unset ETag 
FileETag None 
ExpiresActive On 
ExpiresDefault "access plus 1 year" 
</LocationMatch> 
ProxyPass/http://127.0.0.1:9292/ 
ProxyPassReverse/http://127.0.0.1:9292/ 
</VirtualHost> 

Czy coś przeoczyłem?

+0

Aktywa, jak w .css? Czy zrobiłeś prowizję w folderze public/assets? – clyde

+0

Tak, skompilowałem moje aktywa i wszystkie są na miejscu. – soupdiver

+0

Czy byłeś w stanie to naprawić? – nathanvda

Odpowiedz

0

Kiedyś,

RAILS_ENV=production bundle exec rake assets:precompile 

Żeby było wszystko w porządku pracy, dodałem to do config/environment.rb ...

module MyApp 
    class Application < Rails::Application 
. 
. 
    config.assets.precompile += ['custom.css']  
    config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) 
. 
. 
    end 
end 

(miałem utworzony custom.css.scss. Ale Rails nie rozpoznał .scss, jak widać powyżej. Zakładam, że wszystkie twoje zasoby pojawiają się w folderze public/assets po prekompilacji. Nie rozumiem, co robisz z LocationMatch, wybacz mi moją ignorancję. Co więcej, nie użyłem portu 80. Użyłem 8000. Nie jestem pewien, czy to robi różnicę.

Ponadto, istnieje ustawienie w config/środowiskach/production.rb,

# Disable Rails's static asset server (Apache or nginx will already do this). 
config.serve_static_assets = false 
+2

Przepraszam, ale to nie pasuje do mojego pytania. Zrobiłem wszystkie kroki, o których wspomniałeś, ale jeśli zrozumiałem, że nie powinny być włączone relingi podczas udostępniania zasobów. Apache powinien to zrobić samodzielnie. I dlatego jest "LocationMatch". Ale szyny nadal przetwarzają żądania do katalogu assetów, które powinny być wykonywane bezpośrednio przez Apache – soupdiver

0

Jest to bezpośrednio z dokumentacji Rails Asset-rurociągu dotyczące serwera Apache:

http://guides.rubyonrails.org/asset_pipeline.html

4.1.1 Dalekowzroczna wygasa Nagłówek

Istnieją zasoby prekompilowane w systemie plików i są podawane bezpośrednio przez twój serwer sieciowy. Domyślnie nie mają one przyszłych nagłówków, więc aby uzyskać korzyści z pobierania odcisków palców, musisz zaktualizować konfigurację serwera, aby dodać te nagłówki.

dla Apache:

# The Expires* directives requires the Apache module 
# `mod_expires` to be enabled. 
<Location /assets/> 
    # Use of ETag is discouraged when Last-Modified is present 
    Header unset ETag 
    FileETag None 
    # RFC says only cache for 1 year 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
</Location> 
Powiązane problemy