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

dwa*_*yne 8 ruby-on-rails-3.1 asset-pipeline

我知道已有一百万个问题,但我无法理解.

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

app/assets/javascripts/calendar
Run Code Online (Sandbox Code Playgroud)

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

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_directory .
Run Code Online (Sandbox Code Playgroud)

我的config/environments/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
Run Code Online (Sandbox Code Playgroud)

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

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过在开发和生产中进行预编译 - 文档不清楚我应该在哪里做,但它看起来像生产.

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

ActionView::Template::Error (calendar/date.js isn't precompiled)
Run Code Online (Sandbox Code Playgroud)

我不希望它预编译.我希望它手动加载.(实际上,可以在除了创建的主应用程序之外的文件中进行预编译,但我不知道该怎么做.)

解决方案是什么?

谢谢!

dwa*_*yne 4

好吧,我没有意识到它是如何工作的,但我我已经明白了。

将要手动加载的文件添加到 config/environments/development.rb 中,如下所示:

config.assets.precompile += %w( calendar/*.js jquery_calendar/*.css )
Run Code Online (Sandbox Code Playgroud)

我认为这只是将它们折叠到 application.js 和 application.css 中,但显然不是——它将它们编译为单独的文件。

然后,您可以按照传统方式调用这些文件(在本例中,使用 nifty_layout):

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js"
Run Code Online (Sandbox Code Playgroud)