【问题标题】:Why my rails application fails to run in production if config.assets.compile = false?如果 config.assets.compile = false,为什么我的 Rails 应用程序无法在生产环境中运行?
【发布时间】:2012-04-15 12:13:53
【问题描述】:

我对 Rails 很陌生,如果这是一个愚蠢的问题,我很抱歉。我构建了一个 Rails 3.2 应用程序并准备在生产中部署。

我运行了 rake assets:precompile,花了一些时间并在 public/assets/ 目录中创建了一些文件。

问题是,当我在生产中启动服务器时,它给出了“我们很抱歉”错误,我在生产日志中看不到一个新行,尽管它具有适当的权限。

在 nginx/webrick 日志中,唯一出现的是:

cache: [GET /] miss

所以我尝试了一些方法,最后在将 config.assets.compile 设置为 true 之后,它成功了。

我的问题是为什么会这样?是文件有问题还是预编译任务无法编译?

我以这种方式包含了一个特定的 css 文件(仅适用于 IE):

<!--[if IE ] --><%= stylesheet_link_tag 'ie' %><!-- [endif]-->

这是一个 404 错误。使用 assets/stylesheets/application.css 包含所有其他文件。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    问题是您的文件名为ie(而不是application)。默认情况下,Rails 只编译 application.jsapplication.css

    通过将config.assets.compile 设置为true,您启用了准备ie.css 文件的资产管道fallback

    要将您的 ie.css 样式表包含到编译过程中,您必须像这样添加它:

    config.assets.precompile += %w(ie.css)
    

    【讨论】:

    • 感谢您的回复。我按照你的要求做了,但我仍然无法使用 precompile=false 运行应用程序。 Rails 是否提供有关哪个文件失败的任何信息?
    • 通常rake assets:precompile 会停止发生任何错误,所以我敢打赌这(仍然)是一个配置问题。
    【解决方案2】:

    在生产环境中,Rails 希望您预编译资产,而不是动态地提供它们。

    您需要运行rake assets:precompile,Rails 将构建在生产中支持您的应用所需的静态资产。这通常涉及将您的 SASS 和 CoffeeScript 分别转换为缩小/压缩的 CSS 和 JavaScript。这可以避免为每个请求编译脚本/样式表的成本,这是您不希望在生产环境中发生的事情。

    如果您缺少单个样式表,例如 ie.css,您没有通过资产管道提供服务,您可以指定它的绝对路径,以防止资产助手从 /assets 提供它:

    <%= stylesheet_link_tag '/stylesheets/ie' %>
    

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2012-07-16
      • 2020-08-04
      • 1970-01-01
      • 2011-11-21
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多