Где разместить 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
?!?
Ответы
Ответ 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, но это зависит от вас.