2016-03-20 12 views
0

Ich verwende die neueste Version von Thin, Rails und Ruby. Die relevanten Teile meines Build-Skript sind:Rails, die keine statischen Dateien bereitstellen

export RAILS_ENV=production 
export RAILS_SERVE_STATIC_FILES=true 
# generate static assets 
RAILS_ENV=production rake assets:precompile 
# restart server 
rails server thin -d 

Und in meinem production.rb Ich habe

config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? 

Und ich füge diese Dateien in meiner Ansicht

<%= stylesheet_link_tag 'application', media: 'all' %> 
<%= javascript_include_tag 'application' %> 

mit diesem erfolgreich kompiliert meine Assets und verschiebt sie in den Ordner/public/assets. Beim Laden der Seite wird jedoch keines dieser Assets tatsächlich bereitgestellt. Der erzeugte HTML ist

<link rel="stylesheet" media="all" href="/stylesheets/application.css" /> 
<script src="/javascripts/application.js"></script> 

diese nicht über die Verdauungen im Dateinamen enthalten, so dass ich glaube, dass sie falsch sind. Der Versuch, die Dateinamen sowohl mit als auch ohne ihren Digest manuell zu laden, scheitert auch bei einem 404. Was mache ich falsch?

+0

Zeigen diese Link-Tags nicht auf das Verzeichnis "app/assets" statt auf "public"? –

+0

Ich bin mir nicht sicher, die Dokumentation ist unklar. –

Antwort

1

legen Sie die JS-Dateien unter app/assets/javascript.

Legen Sie die CSS-Dateien unter app/assets/stylesheets.

Alle Ihre js- und CSS-Dateien werden in den Header application.html.erb geladen, der die application.css und application.js lädt. Dies ist, was diese zwei Codezeilen tun.

<%= stylesheet_link_tag 'application', media: 'all' %> 
<%= javascript_include_tag 'application' %> 

Diese beiden Dateien gibt es eine Zeile require_tree ., die alle Dateien in dem entsprechenden Verzeichnis lädt:

app/assets/javascript 
app/assets/stylesheets 

ich in der Regel public Ordner für externe Bibliotheken nur verwenden, wenn ich ein CDN nicht verwende. Sie müssen sie explizit in die Dateien application.js und application.css aufnehmen.