为什么在生产中得到空 CSS 文件?

Why getting empty CSS files in Production?

我在文件active_admin.css.scss中放了很多css个文件:

// Active Admin's got SASS!
@import "active_admin/mixins";
@import "active_admin/base";
@import "admin/plugins/*";
@import "admin/calendar";
@import "jquery-ui.css";
@import "admin/jquery.datepick.css";

但是文件 "jquery-ui.css""admin/jquery.datepick.css" 正在产生问题。我在以下浏览器控制台中收到 404 Not Found 错误:

http://staging.xxx.com/assets/jquery-ui.css
http://staging.xxx.com/assets/admin/jquery.datepick.css

我也检查了浏览器中的资产,这两个文件存在,但里面没有内容。我在 Ec2 中使用 Nginx 作为我的网络服务器。一切都在开发中,而不是在生产中。

我的 Ngnix 配置如 this answer 中所述。我正在使用 Capistrano 进行部署。一切正常,但那 2 个文件不行。

我在 production.rb 中也有以下设置:

config.assets.compile = true
config.assets.precompile += %w[active_admin.css active_admin.js]

但还是不行。我从 here.

中找到了上述建议

我不知道这是否是一个完整的答案,但我不能 post 格式化代码片段,除非它在 ​​"answer" 部分,所以我们开始吧。

我的理论是你丢失的文件没有包含在你的预编译中,也许这会有所帮助。我的资产 .precompile 语句不在 production.rb 中,而是在 assets.rb 中,看起来像这样:

# assets.rb
# Be sure to restart your server when you modify this file.

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
Rails.application.config.assets.precompile += %w( mapworkers.js )
Rails.application.config.assets.precompile += %w( prototype.js )

production.rb

# production.rb
# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_files = false

# Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier

# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false

# Generate digests for assets URLs.
config.assets.digest = true

其他调试想法: 作为一个拥有 65k 代表的人,我怀疑你需要我的调试建议,但特别是我自己的 Rails 服务器设置是带有 Unicorn 的 Nginx .我一直在手动部署,因为我是第一次部署,我想以最直接的方式启动应用程序,然后使用 Capistrano 等组件增加复杂性。如果您发现这个问题很棘手,请完全删除 Capistrano 并手动部署,看看是否可以在没有它的情况下将文件放在需要的位置,然后将 Cap 回滚并查看它是否会破坏任何东西。

删除 @import 声明中的文件扩展名。应该是:

@import "jquery-ui";
@import "admin/jquery.datepick";