我正在运行Rails 3.1.3,其中包括Sprockets 2.0.3作为依赖项。
我按照Rails指南为生产建议的方式设置我的暂存环境。
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
我已加入我的Capfile
load 'deploy'
load 'deploy/assets'
资产在部署时按预期进行预编译。
在公共/资产方面,我发现资产符合预期的指纹。
application-bd402855d34fb61e0a1690da06f79f20.js
application-bd402855d34fb61e0a1690da06f79f20.js.gz
application-ed3f9a8d23992790841c11b6692fb576.css
application-ed3f9a8d23992790841c11b6692fb576.css.gz
...and a bunch of images...
当我加载页面时,我看到了正确的引用,指纹和所有。
<link href="/assets/application-ed3f9a8d23992790841c11b6692fb576.css" media="screen" rel="stylesheet" type="text/css">
<script src="/assets/application-bd402855d34fb61e0a1690da06f79f20.js" type="text/javascript"></script>
然而,所有404s,css,js,图像,一切。
任何人都知道这笔交易是什么?谢谢!
答案 0 :(得分:1)
尽管有其他答案的建议
config.assets.compile = true
...是一种解决方法,而不是解决方案。此选项使Rails可以回退到公共/资产中无法找到的资产的动态编译。它可能会“解决”您的暂存问题,但在运行时让Rails编译资产在生产中并不是最佳选择。
我记得在使用Rails 3.1.x中的新资产管道的最初几个月,我遇到了压缩和生成摘要的问题,我只是在以后的版本中解决了这个问题。我建议你试试
config.assets.compress = false
config.assets.digest = false
单独和一起。和/或升级到更高版本的Rails或资产管道宝石。
答案 1 :(得分:1)
如果您确定资产正在编译并存在于公共目录中,那么它可能是您的Web服务器设置吗?在生产/登台环境中,资产不应该访问rails应用程序并直接从Web服务器提供。下面是一个示例apache config snippet:
<LocationMatch "^/assets/.*$">
Header unset ETag
FileETag None
# RFC says only cache for 1 year
ExpiresActive On
ExpiresDefault "access plus 1 year"
SetEnv no-gzip
RewriteEngine on
# Make sure the browser supports gzip encoding before we send it
RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]
</LocationMatch>
<FilesMatch \.css\.gz$>
ForceType text/css
Header set Content-Encoding gzip
</FilesMatch>
<FilesMatch \.js\.gz$>
ForceType text/javascript
Header set Content-Encoding gzip
</FilesMatch>
答案 2 :(得分:0)
config.assets.compile = false
应该是:
config.assets.compile = true
另外,请确保清除缓存:
bundle exec rake tmp:cache:clear
并重新启动服务器。
答案 3 :(得分:0)
config.assets.compile = false
并且通过capistrano部署还有一个预编译资产的任务(使用rvm):
run "cd #{release_path} && RAILS_ENV=production bundle exec rake assets:precompile", shell: fetch(:rvm_shell)
最后一步是确保我们对资产文件夹进行符号链接,以便我们不需要重新编译未更改的资产。
run "ln -nfs #{shared_path}/assets #{release_path}/public/assets"
答案 4 :(得分:-1)
config.assets.compile = false
应该是真的