【问题标题】:Rails 3.1, exclude JS files from asset pipelineRails 3.1,从资产管道中排除 JS 文件
【发布时间】:2011-12-19 15:38:38
【问题描述】:

我知道这方面已经有一百万个问题,但我无法得到这个。

我想将我的大部分 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)

我不希望它预编译。我希望它手动加载。 (其实在创建的主application.js以外的文件中预编译也是可以的,但我不知道怎么做。)

解决办法是什么?

谢谢!

【问题讨论】:

    标签: ruby-on-rails-3.1 asset-pipeline


    【解决方案1】:

    好吧,我不知道它是如何工作的,但我认为我想通了。

    将要手动加载的文件添加到 config/environments/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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2012-02-04
      • 2011-11-23
      相关资源
      最近更新 更多