【问题标题】:rails 3.1 some assets not precompiling on productionrails 3.1 一些资产没有在生产中预编译
【发布时间】:2011-12-31 01:37:53
【问题描述】:

我遇到了 Heroku 的问题,显示我的“places.js”没有预编译,即使我在 cedar 堆栈上运行,并且在 slug 编译期间它正在运行 rake 预编译任务。所以我尝试使用 rake assets:precompile RAILS_ENV=production 在本地运行它,并且确实 rails 没有预编译我的 /app/assets/javascripts/places.js.coffee.erb 资产。

我的production.rb 使用默认的 rails 3.1 配置,我什至尝试从资产中删除 .erb,但无济于事。

我还认为,由于我的 places.js.coffee.erb 资产未包含在 sprockets 清单中(我手动将其包含在我的应用程序中),它可能只预编译清单中的资产。在清单中要求它也不起作用。

只有我的 application.js.coffee 和 `application.css 正在预编译(有和没有摘要)。

我发现的唯一问题可能是用于匹配资产的正则表达式可能很差,但 (?:\/|\\|\A)application\.(css|js)$ 的默认值与我的资产不匹配,因此应该包含它。

我不确定如何从这里进行故障排除。一切都是默认的。对这里可能发生的事情有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    首先,如果您希望文件不在清单中时进行编译,则需要将其添加到预编译配置选项中:

    config.assets.precompile += ['places.js']

    其次,您能否编辑您的问题以包含您的清单 - 这可能是语法问题。如果我能看到问题可能是什么,我会编辑这个答案。

    【讨论】:

    • 是否可以简单地将文件添加到清单中?
    • 是的,如果您希望所有代码都包含在 application.js 中。这种情况是当您想直接引用文件中的代码时。当一个页面的代码很多而站点的其余部分不需要时,通常会这样做。
    【解决方案2】:

    我遇到了同样的问题并这样解决了:

    # add new file /app/assets/javascripts/places_manifest.js
    //= require places
    
    # add a line to config/application.rb
    config.assets.precompile += ['places_manifest.js']
    
    # in your views include places_manifest, not places
    javascript_include_tag 'places_manifest'
    

    【讨论】:

      【解决方案3】:

      虽然上述解决方案看起来不错,但我想知道为什么我必须这样做?

      和其他人一样,我在生产中遇到错误,指出我新添加的 javascript 文件没有预编译。然而,我在 Rails 在我的生产服务器上生成的缩小的 application.css 文件中找到了它的代码。

      问题是,在开发过程中,我认为我需要添加一个 javascript_include_tag 帮助程序来加载我的新 javascript 文件。添加该助手是我的特定错误的根源。我刚刚删除了它,在开发和生产环境中一切正常。

      所以我对您的建议是在缩小的 application.js 中寻找新 .js 文件的迹象,并且不要按照上述解决方案的建议修改任何其他文件。如有必要,请以我的方式指出错误;)

      【讨论】:

      • 我认为这些适用于您不想使用所有已编译文件的情况,例如您不调用 因为你没有使用 application.html.erb
      猜你喜欢
      • 2012-04-23
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2013-05-08
      • 1970-01-01
      • 2012-05-20
      相关资源
      最近更新 更多