Подтвердить что ты не робот

Где разместить Galleria (каркас галереи изображений jQuery) в Rails 3.1 Asset Pipeline?

Я немного смущен относительно того, где разместить инфраструктуру jQuery, например Galleria в Rails 3.1 новый Asset Pipeline?

Я знаю это, технически, должен войти в /vendors/assets/javascripts, но, насколько я понимаю, папка Galleria с jQuery и темами хочет быть в корневом каталоге (/galleria) на сайте live, чтобы работайте правильно.

Кроме того, пока мы на нем, где поставить следующий script, значит, он появится только на страницах с галереей?

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

Изменить: Удивленно нет ответа!?! Может быть, Galleria не так популярна? Это файлы, которые я пытаюсь загрузить. Они связаны таким образом, хотя я могу легко перемещать их:

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

Я думал, что Звездочки require_tree . загрузит все в app/assets, lib/assets и vendor/assets?!?

4b9b3361

Ответ 1

У меня была та же проблема, и для того, чтобы работать, потребовалось некоторое время. Изначально он отлично работал бы на разработку, но когда мы перешли на производство, Galleria молча провалилась из-за того, что имена файлов активов теперь имеют "отпечатки пальцев". Это также похоже на проблему с темами jQuery UI и многими другими такими скриптами.

Конечно, вы можете просто вернуться к старому способу делать вещи и бросить все в "общедоступном", но нам бы хотелось, чтобы автоматическое слияние всех файлов css/js и ведение дел было рельсами.

Вот как я начал работать:

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

Переименуйте файл galleria.classic.css в galleria.classic.css.scss. Затем замените ссылки на изображение, например (у меня было два):

url("classic-loader.gif") становится image-url("classic-loader.gif")

ОБНОВЛЕНИЕ. Похоже, вам не нужно делать это в Rails 3.1.1. Просто переименуйте файл в .css.scss и rails, который автоматически запросит вызовы url() для вас.

В вашем файле app/assets/javascripts/application.js убедитесь, что у вас есть строки

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

В файле app/assets/stylesheets/application.css убедитесь, что у вас есть строки

*= require galleria.classic
*= require_tree .

Наконец, у Galleria появилась некоторая причудливая нестандартная загрузка css. Это то, что мешало Galleria загружаться на нашем веб-сайте. Поскольку мы уже включили таблицу стилей, мы хотим отключить это поведение. Просто откройте galleria.classic.js (или ваш файл javascript вашей галереи) и замените строку:

css: 'galleria.classic.css',

с:

css: false,

Это скажет Galleria не попробовать загрузить таблицу стилей.

Еще одна вещь - при попытке скомпилировать эти активы я столкнулся с тем, что, по-видимому, является ошибкой в Rails 3.1.0. Когда я запустил rake assets:precompile, я получил такие ошибки, как:

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

Короче говоря, вам нужно установить эту строку в config/environments/production.rb:

config.assets.compile = true

Это не должно быть необходимо после выхода 3.1.1.

Ответ 2

Мне нравится предложение Арьена, хотя я думаю, что vendor/assets/libs более уместен. Здесь моя настройка:

В config/application.rb

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

В app/assets/javascripts/application.js

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

Для инициализации:

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

Обратите внимание, что путь, переданный в loadTheme(), начинается с "активов".

Мне нравится эта настройка, потому что она сохраняет папку galleria неповрежденной. Кроме того, он объединяет galleria-1.2.6.min.js в мой основной файл js (один меньше HTTP-запроса).

Ответ 3

Я тоже наткнулся на эту проблему. Разделение существующей библиотеки так, чтобы она вписывалась в текущую структуру javascripts/stylesheets, представляет собой немного хлопот. Для этого вы можете добавить дополнительный путь к вашему файлу application.rb для загрузки активов, например:

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

Создайте папку "libs" в приложении/активы, скопируйте библиотеку галерей в эту папку и добавьте ее в файл макета приложения:

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

Вы также можете связать код галереи, требуя файлы js, но это зависит от вас.