【发布时间】:2014-10-31 23:10:57
【问题描述】:
这是一个由 Nginx + Passenger 提供服务的 Rails 4 项目。在开发 Rails 环境时完美运行。我认为压缩的 javascript 文件加载正确,因为应该在页面加载时执行的 ajax 调用工作正常。问题是没有任何 CSS 规则应用于文档。
我遇到了与此处描述的完全相同的问题:CSS available but not rendering when push to production [Rails app],除了我的 css 文件的 mime 类型是正确的。
这是我的配置/环境/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)。
【问题讨论】:
-
你是如何部署的?卡皮斯特拉诺?尝试将
config.serve_static_assets设置为false。 -
设置
config.assets.compile = true能解决这个问题吗? -
你也可以发布完整的 HTML 内容吗?另外,我假设您尝试使用 Ctrl+F5 清除缓存并重新加载所有内容?无论哪种方式,您都不希望您的生产应用程序提供静态资产,nginx 会这样做。
config.action_dispatch.x_sendfile_header = "X-Accel-Redirect"。如果您的浏览器可以接收 CSS 文件并正确读取它,那么它应该可以正常工作。你的生产服务器和你的开发服务器是同一台机器吗? 标签是否在标头中? -
不使用 capistrano,通过从 git repop 手动拉取进行部署。 config..assets.compile = true 没有影响。关于 Jake 的建议:生产机器和开发机器不一样;链接标签是def。在标题中。我不会发布 html,但我会告诉你,我在 HTML 验证器中传递了 HTML,并且没有错误(只是一些警告)。
标签: css ruby-on-rails nginx asset-pipeline passenger