7

我对生产模式下的新 Rails 3.1 资产管道的理解如下:->

  1. config.action_controller.asset_host ="https://mybucket.s3.amazonaws.com"
  2. config.assets.compile = false
  3. app/assets被检入回购
  4. bundle exec rake assets:预编译并与 S3 同步(所有资产)
  5. public/assets未检入回购

综上所述,我认为 Rails 会在 S3 上查找所有资产,而我不需要在存储库中使用它们。或者至少我不需要repo 中的预编译资产。public/assets

我在 heroku 上找到了这个,如果没有config.assets.compile = true,它完全不会在 S3 上找到预编译的资产。Heroku必须为所有资产运行一个编译阶段,然后将它们从 S3 中服务出来。跑步heroku run rake assets:precompile不做深蹲。生产过程将再次重新编译所有内容。

嗯?这对我来说毫无意义。

我觉得你不需要用图像填充你的仓库,让你的 CDN 来完成工作。

我有一种感觉,这是不正确的。我是对还是错?

4

6 回答 6

2

当你有这个集合时:

config.assets.compile = false

不会将任何资产请求传递给要服务的 Sprockets。预计文件将在某处预编译。

查看 Heroku 网站上的资产管道设置指南,因为有一个特殊的设置可以让它工作。

于 2011-09-12T07:00:26.307 回答
2

一定要查看github 上的asset_sync 。或者我们的 Heroku 开发中心文章在 Heroku 上使用带有 Rails 3.1 的 CDN 资产主机

Heroku 实验室插件最近解决了环境变量的问题,它使您的应用程序的heroku config变量可以在编译期间访问。要启用此功能,请阅读user_env_compile插件。这意味着您不再需要heroku run rake assets:precompile在部署应用程序后运行。

还。使用asset_sync与让您的应用程序在生产中懒惰地编译资产或直接从您的应用程序服务器预编译的资产提供相当大的性能改进。不过我会这么说。我写的。

  • 使用asset_sync 和S3,您可以预编译资产,这意味着所有资产都可以立即在资产主机/CDN 上提供服务
  • 您只能在预编译时要求 application.rb 中的:assets包,从而在生产中节省内存
  • 您的应用服务器永远不会受到资产请求的影响。你可以花费昂贵的计算时间,你知道的。计算。
  • 最佳实践 HTTP 缓存标头均默认设置
  • 您可以使用一个额外的配置启用自动 gzip 压缩
于 2012-03-07T15:50:59.867 回答
1

由于我永远无法理解的原因,我无法将上述答案标记为有用 - 但我的资产在 Amazon S3 上并且我的应用程序部署到 Heroku 时遇到了同样的问题。

只需检查“public/assets/manifest.yml”就可以解决 Heroku 上出现的“asset not precompiled”错误。

于 2012-01-12T04:02:45.740 回答
1

Adjusting my production.rb file to include 1) config.assets.precompile += %w( *.js *.css ) 2) config.serve_static_assets = true and 3) config.assets.compile = true did the trick for me.

Before including these... my Development environment had all the JS / CSS assets loading, but Production on Heroku was missing them.

Also see: Rails javascript asset missing after precompile

于 2013-05-14T01:58:52.977 回答
0

让我给你一个很大的提示,按照 Heroku 官方的方式来做:

http://devcenter.heroku.com/articles/cdn-asset-host-rails31

https://github.com/rumblelabs/asset_sync

它将为您完成所有工作,Heroku 将进行预编译,然后asset_sync gem 会将其复制到您的 s3 目录中,并且 url_helpers 将正常工作。我想缺点是你必须运行预编译阶段(但它只在东西发生变化时复制)并且你必须将你的资产存储在你的 git repo 中。

于 2011-12-07T16:07:29.347 回答
0

我认为正在发生的事情是它正在寻找 manifest.yml 以了解资产是否已被编译。由于此文件默认位于 public/assets 中,并且您没有将其签入您的 repo,因此假设资产尚未编译。尝试更改文件的位置,config/environments/production.rb看看是否可以解决问题

于 2011-12-14T00:35:52.323 回答