2013-08-25 5 views
8

Ich versuche, meinen Apache-Server für die Bereitstellung von statischen Assets von meiner Rails App zu konfigurieren. Ich habe bereits die vorgeschlagenen Konfigurationen ausprobiert, aber meine Assets werden immer noch nicht angezeigt und beim Versuch, direkt auf sie zuzugreifen, habe ich gerade einen Rails-Fehler bekommen, dass kein passender Controller gefunden wurde. Meine Apache Konfiguration sieht wie folgt aus:Apache wird nicht Server statische Ressourcen für Schienen App

<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> 

Habe ich etwas verpasst?

+0

Assets, wie in css? Haben Sie einen Rake für den öffentlichen Ordner/Assets erstellt? – clyde

+0

Ja, ich habe meine Assets zusammengestellt und sie sind alle an ihrem Platz – soupdiver

+0

Konnten Sie das beheben? – nathanvda

Antwort

0

I verwendet,

RAILS_ENV=production bundle exec rake assets:precompile 

es Arbeit richtig zu machen, habe ich dies zu config/application.rb ...

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

(I erstellt custom.css.scss hatte. Rails erkannte .scss jedoch nicht, wie Sie oben sehen.) Ich gehe davon aus, dass alle Ihre Assets nach dem Vorkompilieren im Ordner public/assets angezeigt werden. Ich verstehe nicht, was du mit LocationMatch machst, verzeihe meine Unwissenheit. Außerdem habe ich Port 80 nicht benutzt. Ich habe 8000 benutzt. Ich bin mir nicht sicher, ob das einen Unterschied macht.

Außerdem gibt es eine Einstellung in config/Umgebungen/production.rb,

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

Entschuldigung, aber das passt nicht wirklich zu meiner Frage. Ich habe alle Schritte ausgeführt, die Sie erwähnen, aber wenn ich es richtig verstanden habe, sollten die Rails NICHT beteiligt sein, wenn Sie die Assets servieren. Apache sollte das alleine machen. Und dafür ist das 'LocationMatch'. Rails bearbeitet jedoch immer noch Anfragen an das Asset-Verzeichnis, die direkt von Apache erledigt werden sollten – soupdiver

0

Dies ist direkt von der Rails-Asset-Pipeline Dokumentation über den Apache-Server:

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

4.1.1 Ferne Zukunft läuft ab Header

Vorkompilierte Anlagen existieren auf dem Dateisystem und werden direkt von Ihrem Webserver bedient. Sie haben standardmäßig keine Headsets in der Zukunft. Um also Fingerabdrücke zu erhalten, müssen Sie Ihre Serverkonfiguration aktualisieren, um diese Header hinzuzufügen.

Für 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> 
Verwandte Themen