Как использовать Sprockets 2 с Rails 3.0.x (как использовать предварительно скомпилированные ресурсы) - PullRequest
4 голосов
/ 04 августа 2011

Я пытаюсь воспроизвести основы конвейера ресурсов, представленного в rails 3.1, в моем приложении rails 3.0 .

Пока что у меня есть что-то вроде этого: https://gist.github.com/1112393.

Прекрасно работает:

  • У меня есть свои активы в приложении / assets /, lib / assets, vendor / assets ...
  • Они всеслужил в / assets
  • Я могу использовать все, что предлагает звездочка 2 и т. д. ...

Дело в том, что я не хочу, чтобы приложение rails обслуживало статические активы.Сервер должен это сделать.Вот почему вы можете прекомпилировать ресурсы в rails 3.1, если я правильно понял.Итак, я сделал задачу rake, которая делает именно это (используя метод прекомпиляции Sprockets :: Environment).И это работает, у меня есть все мои активы по адресу /public/assets/.

Например, у меня есть

  • application-02f8c96b342b4569513d0edf39ef55eb.css
  • application-505e8f472350fb1e2f566106156.js
  • gallery-icons-0e922050a85718fef3cd570df4eb5845.png

Но в rails 3.1 вы можете сделать что-то подобное в вашем style.css.scss.erb

background: url(<%= asset_path("gallery-icons.png") %>)

и вы получите

background: url(/assets/gallery-icons-0e922050a85718fef3cd570df4eb5845.png)

в предварительно скомпилированном файле.

То же самое для stylesheet_link_tag, javascript_link_tag, которые перезаписываются в rails 3.1 для добавления хэша, если я не ошибаюсь.

Как я могу это сделать?

Дайте мне все идеи, которые вы можете иметь!Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 августа 2011

Джош ответил мне здесь: https://github.com/sstephenson/sprockets/issues/151

Assets = Sprockets::Environment.new(Rails.root) do |env|
    assets =  ["javascripts", "stylesheets", "images", "fonts"]
    paths =   ["app/assets/", "lib/assets/", "vendor/assets/" ].map{|p| assets.map{|f| "#{p}#{f}" } }.flatten

    paths.each{ |path| env.append_path path }

    env.static_root = Rails.root.join("public", "assets")
end

Итак, в принципе, у меня есть задача по сбору ресурсов для предварительной компиляции ресурсов:

namespace :assets do
    task :precompile => :environment do
        Assets.precompile(*Rails.application.config.assets.precompile)
    end
end

Моя проблема в основном состояла в том, чтобы узнать, как запросить эти активы. Ответ довольно прост:

Assets['application.js'].digest

Имея отпечаток пальца, легко получить имя файла.

Я создал помощников для включения этих активов: sprockets_include_tag и sprockets_image_tag.

Сделка завершена.

(Хотя сейчас я не могу использовать эти помощники в своих таблицах стилей (style.css.scss.erb))

2 голосов
/ 05 января 2012

Edit: Harry Brundage переписал мой драгоценный камень, который использует более свежие версии всего, это, вероятно, то, что вы хотите использовать:

https://github.com/hornairs/sprockets-rails

Старое предложение:

Я сделал гем, который вы можете включить в свой Rails 3.0.x Gemfile, который является извлечением интеграции звездочек Rails 3.1:

https://github.com/jamesmacaulay/sprockets_rails3_backport

Есть некоторые отличия от поведения Rails 3.1, но они хорошо документированы в README. С большинством вещей, которые вы бы хотели настроить, вы можете просто раскомментировать строки, которые я прокомментировал.

...