Rails 3.1,从资产管道中排除JS文件



我知道关于这个已经有无数的问题了,但是我就是不懂。

我想在资产管道中包含我的大多数JS文件,但我有一些我想有条件地加载(或仅在某些页面上)。这些都是大而复杂的文件,95%的用户永远不会使用它们,所以我宁愿不为每个用户加载它们。一组JS文件用于日历,放置在:

app/assets/javascripts/calendar

所以我的清单设置为只包括顶级目录(并排除日历子目录):

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

我的配置/环境/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

在视图中,我使用Ryan Bates的nifty_layout手动包含日历文件:

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

我在开发和生产中都试过预编译——文档不清楚我应该在哪里做这个,但它看起来像生产。

当我运行页面时,我得到这个:

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

我不想让它预编译。我希望它手动加载。(实际上,在创建的主应用程序.js以外的文件中预编译是可以的,但我不知道如何做到这一点。)

解决方案是什么?

谢谢!

好吧,我不知道它是这样工作的,但我认为我明白了。

添加需要手动加载的文件到config/environments/production目录。

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"

最新更新