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

问题描述 投票:1回答:2

这是Nginx + Passenger服务的Rails 4项目。 在开发Rails环境时完美工作。 我认为压缩的javascript文件正在正确加载,因为应该在页面加载时执行的ajax调用运行良好。 问题是没有任何CSS规则被应用于文档。

我遇到了与此处所述完全相同的问题: 可用的CSS,但推送到生产环境[Rails app]时不呈现,但我的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>

Nginx配置:

http {
    passenger_root /home/ubuntu/.rvm/gems/ruby-2.1.3/gems/passenger-4.0.53;
    passenger_ruby /home/ubuntu/.rvm/gems/ruby-2.1.3/wrappers/ruby;

    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 80;
        server_name subdomain.domain.com;
        root /home/user/rails-project/public;
        passenger_enabled on;
        rails_env production;
    }
}

这是css请求/响应(注意正确的mime类型): 在此处输入图片说明

CSS文件已正确编译,并且所有我的sass和css规则均已存在(sass和css组合)。

css ruby-on-rails nginx asset-pipeline passenger
2个回答
0
投票

静态文件应直接从磁盘提供,因此请确保将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_static”指令可帮助您直接提供gzip,而不会产生任何开销。 您的Nginx应该使用--with-http_gzip_static_module模块进行编译以支持它。


0
投票

事实证明,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文件时,会发生这些编译错误。

我如何解决:

  1. 从项目中删除了所有Bootstrap和Font-awesome宝石
  2. 从其github站点下载了最新的Bootstrap和Font-awesome CSS文件
  3. 将文件放置在供应商/资产中
  4. 从文件中删除了DXImageTransform的所有实例。
  5. 预编译和部署的资产

这个解决方案不是主意,因为现在我必须手动维护引导程序和超棒的字体资产文件。 但是暂时,至少我的应用程序提供压缩的和最小化的资产!

© www.soinside.com 2019 - 2024. All rights reserved.