我在Heroku上使用Rails 3.2.2和CDN(CloudFront)来托管资产。
我使用asset_sync gem尝试Heroku教程(https://devcenter.heroku.com/articles/cdn-asset-host-rails31)。
资产没有问题:预编译,我的所有资产都托管在我的S3存储桶上。
-->heroku run bundle exec rake assets:precompile Running bundle exec rake assets:precompile attached to terminal... up, run.1 AssetSync: using default configuration from built-in initializer AssetSync: Syncing. Using: Manifest /app/public/assets/manifest.yml Uploading: assets/facebook_64-8cdc90984860efef829203e1e01aab10.png Uploading: assets/google_64-11634a6b4a219799449e7a7157f73387.png Uploading: assets/twitter_64-657ee379209d0bb998440421b499a6a2.png Uploading: assets/application-699d029330a2d095a9b59006a63a7b01.js Uploading: assets/application-2060c0efc074ae11265455479abfb6ff.css Uploading: assets/back_office-ccfdd79c9b296176087815c95607f540.css AssetSync: Done.
问题是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引用了好文件<link href="http://s3.amazonaws.com/annoncestest/assets/application-85cc4376a5de3b224db7c0548a44e7cb.css" media="all" rel="stylesheet" type="text/css" />
但Heroku总是试图访问application-2060c0efc074ae11265455479abfb6ff.css
我尝试使用:
在production.rb中设置清单路径 application-85cc4376a5de3b224db7c0548a44e7cb.css
要么
config.assets.manifest = "http://myapp.cloudfront.net/assets"
每次css文件都不好。
我不知道问题是什么。有什么想法吗?
答案 0 :(得分:1)
由于heroku的支持,我解决了这个问题。
首先,我的部署运行不顺利,因为我在rake资产中遇到了一个着名的问题:预编译
could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port xxxx?
要防止这种情况,您需要在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实验室:
heroku plugins:install https://github.com/heroku/heroku-labs.git
heroku labs:enable user_env_compile
你再次部署在heroku和(理论上)它应该工作正常! (它对我有用!)
我希望这对未来的某人有所帮助!
答案 1 :(得分:0)
我不确定这是否有帮助,但我没有在任何资产管道项目中检查manifest.yml。这可以归结为Heroku buildpack将运行资产预编译,生成一个你知道正确的新清单。
我会从Git中删除它,看看它们是如何工作的(在部署之前在本地编译资产是推送到Heroku时不需要做的事情)