Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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
Rails&Nginx&Passenger css和javascript加载,但未在生产中应用_Css_Ruby On Rails_Nginx_Asset Pipeline_Passenger - Fatal编程技术网

Rails&Nginx&Passenger css和javascript加载,但未在生产中应用

Rails&Nginx&Passenger css和javascript加载,但未在生产中应用,css,ruby-on-rails,nginx,asset-pipeline,passenger,Css,Ruby On Rails,Nginx,Asset Pipeline,Passenger,这是一个由Nginx+乘客提供服务的Rails 4项目。在rails环境处于开发阶段时,它可以完美地工作。我认为压缩的javascript文件加载正确,因为在页面加载时应该执行的ajax调用工作正常。问题是没有任何CSS规则应用于文档 我有与这里描述的完全相同的问题:除了css文件的mime类型是正确的之外 这是我的config/environments/production.rb config.eager_load = true config.cache_classes = true

这是一个由Nginx+乘客提供服务的Rails 4项目。在rails环境处于开发阶段时,它可以完美地工作。我认为压缩的javascript文件加载正确,因为在页面加载时应该执行的ajax调用工作正常。问题是没有任何CSS规则应用于文档

我有与这里描述的完全相同的问题:除了css文件的mime类型是正确的之外

这是我的config/environments/production.rb

  config.eager_load = true
  config.cache_classes = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_assets = true
  config.assets.compress = true
  config.assets.compile = false
  config.assets.digest = true
  config.assets.css_compressor = :yui
资产已正确预编译。以下是相关的html链接/脚本规范:

  <link data-turbolinks-track="true" href="/assets/application-3d4e35bd2c14a288b7d2ff3f5dd8f5c4.css" media="all" rel="stylesheet" />

  <script data-turbolinks-track="true" src="/assets/application-ab6bb9f22b553eba6788881b0b36f94c.js"></script>
以下是css请求/响应通知,请注意正确的mime类型:


CSS文件已正确编译,所有我的sass和CSS规则以及当前的sass和CSS组合。

静态文件应直接从磁盘提供,因此请确保Nginx设置为具有足够的权限来访问这些文件。它还建议为静态设置自己的位置:

location /assets/  {
  root /home/user/rails-project/public;
  gzip_static on;
  expires max;
  add_header Cache-Control public;
  access_log /dev/null;
}

Assets Pipeline生成压缩JS和CSS文件的gzip版本,因此gzip_静态指令可以帮助您直接提供gzip,而不会产生任何开销。您的Nginx应该使用module-with-http\u gzip\u static\u模块来编译,以支持这一点。

事实证明,CSS编译器很可能是这个问题的根源。当我将编译器设置为这样时:

config.assets.css_compressor=:yui

css文件似乎被缩小并编译而没有问题。然而,一旦我删除了该行,我假设它默认为sass gem进行压缩,然后当我尝试rake assets:precompile时,我得到了以下错误:

➜  stylesheets git:(master) ✗ rake assets:precompile
(in /home/ubuntu/spice-conduit)
rake aborted!
Sass::SyntaxError: Invalid CSS after "    filter: progid": expected ";", was ": DXImageTransf..."
  (in /home/ubuntu/spice-conduit/app/assets/stylesheets/application.css)
(sass):3566
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1147:in `expected'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1085:in `expected'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1080:in `tok!'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:586:in `block in declaration_or_ruleset'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1123:in `call'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1123:in `rethrow'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:592:in `declaration_or_ruleset'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:554:in `block_child'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:546:in `block_contents'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:535:in `block'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:529:in `ruleset'
很明显,在使用yui压缩机时,有一些兼容错误没有显示出来?编译引导和字体可怕的css文件时会发生这些编译错误

我如何修复:

从项目中删除了所有引导和字体真棒宝石 从他们的github站点下载了最新的引导和字体很棒的css文件 在供应商/资产中放置文件 已从文件中删除DXImageTransform的所有实例。 预编译和部署的资产
这个解决方案并不理想,因为现在我必须手动维护引导和字体资产文件。然而,就目前而言,至少我的应用程序提供压缩和缩小的资产

你是如何部署的?卡皮斯特拉诺?尝试将config.serve\u static\u assets设置为false。设置config.assets.compile=true是否可以修复此问题?您还可以发布完整的HTML内容吗?另外,我假设您尝试了Ctrl+F5来清除缓存并重新加载所有内容?无论哪种方式,您都不希望生产应用程序服务于静态资产,nginx将这样做。config.action\u dispatch.x\u sendfile\u header=x-Accel-Redirect。如果您的浏览器能够接收CSS文件并正确读取它,那么无论如何它都应该工作。生产服务器与开发服务器是同一台机器吗?标签在标题中吗?不使用capistrano,通过手动从git repop中拉出来部署。config..assets.compile=true没有影响。关于杰克的建议:生产和开发机器不一样;链接标签是def。在标题中。我不会发布html,但我会告诉你,我在html验证程序中传递了html,没有错误,只有一些警告。嗨,迈克,谢谢你的回答。我卸载了nginx,然后按照您的建议重新安装了带有gzip静态模块的nginx。这并没有解决这个问题。
➜  stylesheets git:(master) ✗ rake assets:precompile
(in /home/ubuntu/spice-conduit)
rake aborted!
Sass::SyntaxError: Invalid CSS after "    filter: progid": expected ";", was ": DXImageTransf..."
  (in /home/ubuntu/spice-conduit/app/assets/stylesheets/application.css)
(sass):3566
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1147:in `expected'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1085:in `expected'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1080:in `tok!'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:586:in `block in declaration_or_ruleset'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1123:in `call'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:1123:in `rethrow'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:592:in `declaration_or_ruleset'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:554:in `block_child'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:546:in `block_contents'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:535:in `block'
/home/ubuntu/.rvm/gems/ruby-2.1.3/gems/sass-3.2.19/lib/sass/scss/parser.rb:529:in `ruleset'