【问题标题】:Why Heroku don't use the good manifest.yml为什么 Heroku 不使用好的 manifest.yml
【发布时间】:2012-04-12 01:05:19
【问题描述】:

我在 Heroku 上使用 Rails 3.2.2 和 CDN (CloudFront) 来托管资产。

我尝试了使用 assets_sync gem 的 Heroku 教程 (https://devcenter.heroku.com/articles/cdn-asset-host-rails31)。

资产没有问题:预编译,我所有的资产都托管在我的 S3 存储桶上。

-->heroku run bundle exec rake assets:precompile 运行 bundle exec rake assets:precompile 附加到终端... up, run.1 AssetSync:使用内置初始化程序的默认配置 AssetSync:同步。 使用:清单 /app/public/assets/manifest.yml 上传:assets/facebook_64-8cdc90984860efef829203e1e01aab10.png 上传:assets/google_64-11634a6b4a219799449e7a7157f73387.png 上传:assets/twitter_64-657ee379209d0bb998440421b499a6a2.png 上传:assets/application-699d029330a2d095a9b59006a63a7b01.js 上传:assets/application-2060c0efc074ae11265455479abfb6ff.css 上传:assets/back_office-ccfdd79c9b296176087815c95607f540.css AssetSync:完成。

问题是 Heroku 试图访问错误的 CSS 文件:

<link href="http://s3.amazonaws.com/annoncestest/assets/application-85cc4376a5de3b224db7c0548a44e7cb.css" media="all" rel="stylesheet" type="text/css" />

如您所见,应用程序 CSS 的 MD5 并不相同。

但是,JS 文件或其他不是 CSS 文件的资产没有问题。

在我的存储桶中,manifest.yml 引用了好文件application-2060c0efc074ae11265455479abfb6ff.css 但是 Heroku 总是尝试访问application-85cc4376a5de3b224db7c0548a44e7cb.css

我尝试在我的 production.rb 中设置清单路径:

config.assets.manifest = "http://myapp.cloudfront.net/assets" 要么 config.assets.manifest = "http://myapp.cloudfront.net/assets/manifest.yml"

每次css文件都是坏的。

我不知道有什么问题。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails heroku asset-pipeline cdn assets


    【解决方案1】:

    感谢 heroku 的支持,我解决了这个问题。

    首先,我的部署运行不佳,因为我在 rake assets 期间遇到了著名的问题:预编译

    无法连接到服务器:连接被拒绝
    服务器是否在主机“127.0.0.1”上运行并接受
    端口 xxxx 上的 TCP/IP 连接?

    为防止这种情况,您需要在 config/application.rb 中将 initialize_on_precompile 设置为 false(而不是在 config/environments/production.rb 中):

    config.assets.initialize_on_precompile = false

    之后,当您部署预编译时似乎可以工作,但asset_sync 存在问题,找不到您的 ENV 变量(FOG_DIRECTORY 和 FOG_PROVIDER)

    要解决这个问题,您需要使用以下两个命令安装 heroku labs:

    heroku plugins:install https://github.com/heroku/heroku-labs.git
    heroku labs:enable user_env_compile

    然后您再次在 heroku 上部署,(理论上)它应该可以正常工作! (它对我有用!)

    我希望这对未来的人有所帮助!

    【讨论】:

      【解决方案2】:

      我不确定这是否有帮助,但我没有在我的任何资产管道项目中签入 manifest.yml。这是因为 Heroku buildpack 将运行资产预编译,从而生成一个您知道是正确的新清单。

      我会从 Git 中删除它,看看它们是如何工作的(在部署之前在本地编译资产是你在推送到 Heroku 时不需要做的事情)

      【讨论】:

      • 我删除了项目中的所有 manifest.yml。我的 git 存储库中没有更多的预编译资产。我运行 heroku run rake assets:precompile 所以是 heroku 预编译我的资产并将其发送到 S3。在预编译期间没有问题。但最后我有同样的问题:糟糕的 application.css 摘要(而 application.js 很好!)
      • 你不需要在 Git 中预编译资产,它们由 Heroku 生成
      猜你喜欢
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2013-07-07
      • 2013-07-23
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多