【发布时间】:2017-11-24 12:34:32
【问题描述】:
我已经开始学习 rails 并且已经构建了两个应用程序,一个简单的博客应用程序和一个商店应用程序。现在我在上传到heroku时遇到了一个术语预编译资产,有人可以向我解释一下在将应用程序部署到生产环境时是否有必要,因为我已经将我的商店应用程序上传到heroku没有任何问题?
【问题讨论】:
标签: ruby-on-rails heroku
我已经开始学习 rails 并且已经构建了两个应用程序,一个简单的博客应用程序和一个商店应用程序。现在我在上传到heroku时遇到了一个术语预编译资产,有人可以向我解释一下在将应用程序部署到生产环境时是否有必要,因为我已经将我的商店应用程序上传到heroku没有任何问题?
【问题讨论】:
标签: ruby-on-rails heroku
资产是您的css + JS。预编译资产意味着它们被加入到单个 .css 和另一个单个 .js. 文件中(以在一个 HTTP 请求中加载它)。并且特殊的缩小机制适用于这两个文件(使它们更小)。默认情况下,Rails 以某种方式设置,它使用 dev 中的平均文件和 prod 中的编译文件。您可以在配置中轻松更改此设置,但除非您真的知道自己在做什么,否则不应该这样做。
如果你愿意,你可以在本地运行 rake assets:precompile 编译这些文件,然后把它放到 git 中。我认为您可以在 heroku 配置中的 heroku 部署期间禁用/启用预编译。但是,总的来说,我会坚持使用默认设置。
关于资产管道的更多信息:http://guides.rubyonrails.org/asset_pipeline.html
【讨论】:
Rails 有一个资产管道,它由 Sprocket 和资产助手组成。
资产管道将连接和缩小您的 CSS 和 javascript,并负责设置图像和其他资产的正确路径。这称为编译资产。
在开发过程中,这是针对每个请求即时完成的,让您可以立即看到更改。
在生产中,这会很慢,因此资产应该在部署时编译一次。 Heroku does this automatically 在提交后挂钩中为您服务。
预编译是在本地运行rake assets:precompile,然后将结果上传或推送到服务器。如果您在不支持资产管道的情况下部署到服务器,则会执行此操作。例如,如果生产服务器没有运行 uglifier 所需的 javascript 运行时。
它给 git 更改历史添加了大量噪音,并且手动执行任何操作是用户错误的常见来源。非常糟糕,只有在必要时才这样做。
【讨论】: