12

Jestem trochę zdezorientowany, gdzie umieścić ramy jQuery jak Galleria w Rails 3.1 nowy Asset Pipeline?Gdzie umieścić Galerię (frameworka galerii obrazów jQuery) w Rails 3.1 Asset Pipeline?

Znam go, technicznie, powinien udać się do /vendors/assets/javascriptsale, to jest moje zrozumienie, że folder Galleria z jQuery & tematów chce być root (/galleria) miejsca na żywo, aby działać poprawnie.

Co więcej, skoro już tu jesteśmy, gdzie umieścić poniższy skrypt, aby pojawił się tylko na stronie (stronach) z galerią?

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

Edit: Zdziwiona nie ma odpowiedzi!?! Może Galleria nie jest tak popularna? Oto pliki, które próbuję wczytać. Są one dołączane tak chociaż mógłbym łatwo przenieść je:

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 

myślałem Zębatkirequire_tree . byłoby załadować wszystko app/assets, lib/assets i vendor/assets?!?

+0

Dobre pytania dookoła. Przepraszam, nie znam odpowiedzi na nie. – Andrew

Odpowiedz

2

Natknąłem się również na ten problem. Podział istniejącej biblioteki tak, aby pasował do obecnej struktury javascripts/stylesheets, jest nieco kłopotliwy. Do nich można dodać dodatkową ścieżkę do pliku environment.rb do ładowania zasobów z, jak to:

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

Utwórz folder libs „” pod app/aktywów, należy skopiować bibliotekę Galleria do tego folderu i dodać do plik układu aplikacji:

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

Można również spakować kod Galleria, wymagając plików js, ale to zależy od Ciebie.

22

Miałem ten sam problem, a praca zajęła trochę czasu. Początkowo działałby dobrze na etapie rozwoju, ale kiedy przenieśliśmy się do produkcji, Galeria cicho zawodziła, ponieważ nazwy plików aktywów mają teraz "odciski palców". To również wydaje się być problemem z tematami jQuery UI i wieloma innymi podobnymi skryptami.

Oczywiście można po prostu wrócić do dawnego sposobu robienia rzeczy i rzucać wszystko w "publiczne", ale chcielibyśmy skorzystać z automatycznego łączenia wszystkich plików css/js i robienia rzeczy po szynach.

To jak mam to działa:

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

Zmień nazwę pliku galleria.classic.css do galleria.classic.css.scss. Następnie zastąpienie odniesień graficznych, jak tak (miałem dwa):

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

AKTUALIZACJA: Wygląda na to, że nie trzeba robić to w Rails 3.1.1. Po prostu zmień nazwę pliku na .css.scss, a szyny automatycznie przetworzą połączenia url().

W pliku app/assets/javascripts/application.js, upewnij się, że linie

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

W Tobie app/assets/stylesheets/application.css plik, upewnij się, że linie

*= require galleria.classic 
*= require_tree . 

wreszcie Galleria wydaje się mieć jakiś fantazyjny non -standardowe ładowanie css zostało wbudowane. To zapobiegło załadowaniu Galerii na naszą stronę produkcyjną. Ponieważ już zawarliśmy arkusz stylów, chcemy wyłączyć to zachowanie. Wystarczy otworzyć galleria.classic.js (lub motyw Galleria javascript file) i zamienić linię:

css: 'galleria.classic.css', 

z:

css: false, 

Dzięki temu dowiesz Galleria nie próbować ładowania arkusza stylów.

Jeszcze jedno - próbując skompilować te zasoby, natknąłem się na to, co najwyraźniej jest to bug in Rails 3.1.0. Kiedy wpadłem rake assets:precompile, mam błędy takie jak:

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

Krótko mówiąc, trzeba ustawić tę linię config/environments/production.rb:

config.assets.compile = true 

To nie powinno być konieczne, gdy 3.1.1 jest zwolniony.

+2

Nie lubię zmieniać kodu biblioteki, tj. Zmieniać 'url (...)' na 'image-url (...)'. Spróbuję pozwolić im pozostać w folderze publicznym. – crispy

+0

Nie, ale wydaje się, że zmiana kodu biblioteki jest jedynym sposobem na uzyskanie niesamowitych korzyści z potoku Rails 3.1. –

+0

Czy są jakieś niesamowite korzyści dla obrazów przywoływanych w arkuszach stylów? Odciski palców ...? – crispy

3

Podobają mi się sugestie Arjena, choć uważam, że bardziej odpowiednie jest vendor/assets/libs. Oto moja konfiguracja:

W config/environment.rb

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

w APP/assets/JavaSkrypty/application.js

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

Aby zainicjować:

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

Zwróć uwagę, że ścieżka przekazana do loadTheme() zaczyna się od "a ssets ".

Podoba mi się ta konfiguracja, ponieważ zachowuje nienaruszony folder galleria. Ponadto dołącza on galleria-1.2.6.min.js do mojego głównego pliku js (jedno mniej żądania http).

+0

Próbowałem również tego rozwiązania, ale co działa w przerwach w rozwoju produkcji. Mogę wypróbować loadTheme ("assets/gall ...") lub loadTheme ('/ assets/gall ...') lub cokolwiek innego, nie znajdzie motywu. Dostaję tylko: Błąd krytyczny: nie można załadować motywu at assets/galleria/themes/classic/galleria.classic.min.js, sprawdź ścieżkę motywu –

+0

@KarstenS. Ustawienia, które sugeruję, odnoszą się do wszystkich poziomów produkcji. Spróbuj znaleźć różnice między twoim deweloperem a prodem, szczególnie w konfiguracji potoków aktywów. –

Powiązane problemy