Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 暂存上的Rails资产管道:正确的指纹,但不包含404_Ruby On Rails_Asset Pipeline_Production_Staging_Sprockets - Fatal编程技术网

Ruby on rails 暂存上的Rails资产管道:正确的指纹,但不包含404

Ruby on rails 暂存上的Rails资产管道:正确的指纹,但不包含404,ruby-on-rails,asset-pipeline,production,staging,sprockets,Ruby On Rails,Asset Pipeline,Production,Staging,Sprockets,我正在运行Rails 3.1.3,其中包含链轮2.0.3作为依赖项 我将登台环境设置为按照Rails指南建议的生产方式进行配置 config.serve_static_assets = false config.assets.compress = true config.assets.compile = false config.assets.digest = true 我已将其包含在我的CAP文件中 load 'deploy' load 'deploy/assets' 并且资产在部署时按预

我正在运行Rails 3.1.3,其中包含链轮2.0.3作为依赖项

我将登台环境设置为按照Rails指南建议的生产方式进行配置

config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
我已将其包含在我的CAP文件中

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、图像等等

有人知道这是怎么回事吗?谢谢

config.assets.compile = false
应该是:

config.assets.compile = true
此外,请确保清除缓存:

bundle exec rake tmp:cache:clear
然后重新启动服务器

config.assets.compile = false

这应该是真的

尽管其他答案中有建议

config.assets.compile = true
…是一种解决方法,而不是解决方案。此选项使Rails能够返回到对公共/资产中找不到的资产的动态编译。它可能会“解决”您的登台问题,但让Rails在运行时编译资产在生产中并不完全是最佳的

config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
我记得在Rails3.1.x中使用新资产管道的最初几个月里,我在压缩和生成摘要方面都遇到了问题,我只是在以后的版本中才真正解决了这些问题。我建议试试看

config.assets.compress = false
config.assets.digest = false

无论是单独还是一起。和/或升级到更高版本的Rails或资产管道gems。

几个月前我遇到了同样的问题。出于几个原因,我选择在生产中手动触发资产编译,因此my production.rb

config.assets.compile = false
通过capistrano部署,还需要预编译资产(同时使用rvm):

最终的步骤是确保我们将资产文件夹符号化,这样我们就不需要重新编译未更改的资产

run "ln -nfs #{shared_path}/assets #{release_path}/public/assets"

如果您确定这些资产正在编译并存在于公共目录中,是否可能是您的web服务器设置?在生产/登台环境中,资产不应该进入rails应用程序,而是直接从web服务器提供服务。下面是一个apache配置代码段示例:

   <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>

标题未设置ETag
FileTag无
#RFC表示缓存只能使用1年
过期于
ExpiresDefault“访问权限加1年”
SetEnv no gzip
重新启动发动机
#在发送之前,请确保浏览器支持gzip编码
RewriteCond%{HTTP:Accept Encoding}\b(x-)?gzip\b
RewriteCond%{REQUEST_FILENAME}.gz-s
重写规则^(+)$1.gz[L]
强制类型文本/css
标题集内容编码gzip
ForceType文本/javascript
标题集内容编码gzip

您是以“生产”的形式运行staging,还是有staging.rb配置文件?如果是这样,您可能没有正确的管道选项。我想要几乎相同的行为。不是吗?应该没问题。我会再考虑一下…我在生产模式中也有同样的问题。使用完全相同版本的rails ruby和sprocket在本地进行测试。您是否尝试过在预编译之前执行rake assets:clean?您的暂存环境应该与您的生产环境相同,因为这是整个暂存点。