2011-12-19 72 views
8

我知道这里有100万个问题,但我无法得到这个。Rails 3.1,从资产管道中排除JS文件

我想包括我的JS文件的大部分资产管道,但我有几个我想有条件地(或只在某些页面)加载。这些是大而复杂的文件,永远不会被95%的用户使用,所以我宁愿没有为每个用户加载它们。的JS文件,一组是一个日历,放置在:

app/assets/javascripts/calendar 

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

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

我的config /环境/ 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) 

我不希望它预编译。我想它手动加载。 (实际上,预编译除了创建的主application.js以外的文件是可以的,但我不知道该怎么做。)

解决方案是什么?

谢谢!

回答

4

好的,我没有意识到这是如何工作,但我认为我想通了。

添加的文件手动加载到配置/环境/ 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"