12 Stimmen

Wo Galleria (jQuery Bild-Galerie-Framework) in Rails 3.1 Asset Pipeline zu setzen?

Ich bin ein bisschen verwirrt, wo man ein jQuery-Framework wie Galleria en Rails 3.1 Der neue Asset-Pipeline ?

Ich weiß, technisch gesehen sollte es in die /vendors/assets/javascripts sondern bin ich der Meinung, dass die Galleria Ordner mit den jQuery- und Themes-Dateien muss sich im Stammverzeichnis ( /galleria ) der Live-Site, um korrekt zu funktionieren.

Und wenn wir schon dabei sind, wo soll das folgende Skript eingefügt werden, damit es nur auf den Seiten mit einer Galerie erscheint?

<script>
    $('#gallery').galleria({
        width:500,
        height:500
    });
</script>

Modifier : Ich bin überrascht, dass es keine Antwort gibt!?! Vielleicht ist Galleria nicht so beliebt? Dies sind die Dateien, die ich zu laden versuche. Sie sind so gebündelt, obwohl ich sie leicht verschieben könnte:

vendor/
  assets/
    javascripts/
      galleria-1.2.5.js
      galleria-1.2.5.min.js
    galleria/
      themes/
        classic/
          classic-loader.gif
          classic-map.png
          galleria.classic.css
          galleria.classic.js
          galleria.classic.min.js

Ich dachte Ritzel require_tree . würde alles in app/assets , lib/assets y vendor/assets ?!?

22voto

Adrian Macneil Punkte 12571

Ich hatte das gleiche Problem, und es dauerte eine Weile, bis es funktionierte. Zunächst funktionierte es in der Entwicklungsphase einwandfrei, aber als wir zur Produktion übergingen, schlug Galleria stillschweigend fehl, da die Asset-Dateinamen jetzt "Fingerabdrücke" hatten. Dies scheint auch ein Problem mit jQuery UI Themen, und viele andere solche Skripte sein.

Natürlich könnte man auch einfach zur alten Methode zurückkehren und alles in "public" packen, aber wir möchten den Vorteil haben, dass alle css/js-Dateien automatisch zusammengeführt werden und die Dinge auf die Art und Weise von rails erledigt werden.

So habe ich es zum Laufen gebracht:

vendor/
  assets/
    images/
      classic-loader.gif
      classic-map.gif
    javascripts/
      galleria-1.2.5.js
      galleria.classic.js
    stylesheets
      galleria.classic.css.scss

Benennen Sie Ihr galleria.classic.css Datei zu galleria.classic.css.scss . Ersetzen Sie dann die Bildreferenzen, etwa so (ich hatte zwei):

url("classic-loader.gif") wird image-url("classic-loader.gif")

UPDATE: Es sieht so aus, als ob Sie dies in Rails 3.1.1 nicht tun müssen. Benennen Sie die Datei einfach in .css.scss um und Rails wird die url()-Aufrufe automatisch für Sie vorverarbeiten.

In Ihrem app/assets/javascripts/application.js Datei, stellen Sie sicher, dass die Zeilen

//= require galleria-1.2.5
//= require galleria.classic
//= require_tree .

Bei Ihnen app/assets/stylesheets/application.css Datei, stellen Sie sicher, dass die Zeilen

*= require galleria.classic
*= require_tree .

Schließlich scheint Galleria einige ausgefallene Nicht-Standard-CSS-Laden in eingebaut haben. Das hat verhindert, dass Galleria auf unserer Produktionswebsite geladen werden konnte. Da wir das Stylesheet bereits eingebunden haben, wollen wir dieses Verhalten deaktivieren. Öffnen Sie einfach galleria.classic.js (oder Ihre Galleria-Theme-Javascript-Datei), und ersetzen Sie die Zeile:

css: 'galleria.classic.css',

mit:

css: false,

Dadurch wird Galleria angewiesen, nicht zu versuchen, das Stylesheet zu laden.

Noch eine Sache: Beim Versuch, diese Assets zu kompilieren, bin ich auf ein Problem gestoßen, das offenbar ein Fehler in Rails 3.1.0 . Als ich die rake assets:precompile erhalte ich Fehler wie:

$ bundle exec rake assets:precompile
rake aborted!
classic-loader.gif isn't precompiled
  (in /vendor/assets/stylesheets/galleria.classic.css.scss)

Lange Rede, kurzer Sinn: Sie müssen diese Zeile in config/environments/production.rb :

config.assets.compile = true

Dies sollte nicht mehr nötig sein, sobald 3.1.1 veröffentlicht ist.

3voto

Jared Beck Punkte 15494

Ich mag Arjens Vorschlag, obwohl ich denke, dass vendor/assets/libs angemessener ist. Hier ist mein Aufbau:

In config/application.rb

config.assets.enabled = true
config.assets.paths << "#{Rails.root}/vendor/assets/libs"

In app/assets/javascripts/application.js

//= require galleria/galleria-1.2.6.min.js

Zum Initialisieren:

Galleria.loadTheme('assets/galleria/themes/classic/galleria.classic.min.js');
$('#gallery').galleria();

Beachten Sie, dass der Pfad, der an loadTheme() beginnt mit "Vermögenswerte".

Ich mag diese Einstellung, weil sie die galleria Ordner intakt. Außerdem verkettet es galleria-1.2.6.min.js auf meine Haupt-JS-Datei (eine http-Anfrage weniger).

2voto

Ich bin auch über dieses Problem gestolpert. Eine bestehende Bibliothek so aufzuteilen, dass sie in die aktuelle javascripts/stylesheets-Struktur passt, ist ein bisschen mühsam. Daher kann man einen zusätzlichen Pfad in die Datei application.rb einfügen, um Assets von dort zu laden, etwa so:

    # Enable the asset pipeline
    config.assets.enabled = true
    config.assets.paths << "#{Rails.root}/app/assets/libs"

Erstellen Sie einen "libs"-Ordner unter app/assets, kopieren Sie die Galleria-Bibliothek in diesen Ordner und fügen Sie sie zu Ihrer Anwendungslayoutdatei hinzu:

    <%= javascript_include_tag 'galleria/galleria-1.2.4.min.js' %>
    <%= javascript_include_tag 'galleria/themes/classic/galleria.classic.min.js' %>

Sie könnten auch den Galleria-Code bündeln, indem Sie die js-Dateien benötigen, aber das bleibt Ihnen überlassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X