Rails 3.1, исключить файлы JS из конвейера ресурсов - PullRequest
8 голосов
/ 19 декабря 2011

Я знаю, что уже есть миллион вопросов по этому вопросу, но я не могу получить это.

Я хочу включить большинство моих файлов JS в конвейер ресурсов, но у меня есть несколько, которые я хочу загрузить условно (или только на определенных страницах). Это большие, сложные файлы, которые никогда не будут использоваться 95% пользователей, поэтому я бы предпочел, чтобы они не загружались для каждого пользователя. Один набор файлов JS предназначен для календаря, помещенного в:

app/assets/javascripts/calendar

Таким образом, мой манифест настроен на включение только верхнего каталога (и исключая подкаталог календаря):

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_directory .

Мой конфиг / environment / production.rb:

# Compress JavaScripts and CSS
config.assets.compress = true

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

# Generate digests for assets URLs.
config.assets.digest = true

# This following config is left over from previous Rails app,
# so not sure if it's now unnecessary ...
# Disable Rails's static asset server
# In production, Apache or nginx will already do this
config.serve_static_assets = false

В представлении я использую nifty_layout Райана Бейтса, чтобы вручную включать файлы календаря:

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js"

Я пробовал прекомпилировать как в разработке, так и в производстве - в документах не ясно, где я должен это делать, но похоже на производство.

И когда я запускаю страницу, я получаю это:

ActionView::Template::Error (calendar/date.js isn't precompiled)

Я не хочу, чтобы он был предварительно скомпилирован. Я хочу, чтобы он загружался вручную. (На самом деле, было бы хорошо предварительно скомпилировать в файл, отличный от созданного основного application.js, но я не знаю, как это сделать.)

Какое решение?

Спасибо!

1 Ответ

4 голосов
/ 20 декабря 2011

ОК, я не осознавал, что это так, но я думаю Я понял это.

Добавьте файлы для ручной загрузки в config / environment / production.rb следующим образом:

config.assets.precompile += %w( calendar/*.js jquery_calendar/*.css )

Я думал, что это просто сворачивает их в application.js и application.css, но, очевидно, нет - он компилирует их как отдельные файлы.

Затем вы можете вызывать файлы, как вы это обычно делаете (в этом случае, используя nifty_layout):

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js"
...