这是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组合)。
静态文件应直接从磁盘提供,因此请确保将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模块进行编译以支持它。
事实证明,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文件时,会发生这些编译错误。
我如何解决:
这个解决方案不是主意,因为现在我必须手动维护引导程序和超棒的字体资产文件。 但是暂时,至少我的应用程序提供压缩的和最小化的资产!