Rails:application.css 不在资产管道中

Posted

技术标签:

【中文标题】Rails:application.css 不在资产管道中【英文标题】:Rails: application.css not in asset pipeline 【发布时间】:2019-06-15 21:05:35 【问题描述】:

我知道这是一个老问题,但没有答案能解决我的问题。

我是 Ruby on Rails 的新手,刚刚使用 PostgreSQL 数据库创建了项目,只是为了能够将项目上传到 Heroku。

当我启动 Rails 服务器时,我收到错误消息“资产管道中不存在 application.css。”

我正在使用 bootstrap 4 gem,这需要您将 applications.css 重命名为 application.scss。

我不知道怎么了。

我真的尝试了***上的每一个答案,但没有任何成功:(

请帮帮我,我做错了什么?

这是我得到的错误:

【问题讨论】:

【参考方案1】:

好的,第一件事。

您是否在production.rb 文件夹下的production.rb 文件中设置了config.serve_static_files = true

由于我们在 nginx 后面运行,在我们的例子中它看起来像 config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

第二件事。 rails assets:precompile上传到服务器之前你做了吗?

第三件事是。您是否尝试过调用您的文件application.css.scss,然后重做rails assets:precompile

最后,同样重要的是。您的application.scss 文件看起来如何?

您是否删除了所有*= 并使用@import 代替Bootstrap

文档中有很好的描述:

在 app/assets/stylesheets/application.scss 中导入 Bootstrap 样式:

// 必须设置或导入自定义引导变量之前 引导程序。 @import "引导";

然后它说:

确保文件具有 .scss 扩展名(或 .sass 用于 Sass 语法)。如果 您刚刚生成了一个新的 Rails 应用程序,它可能带有一个 .css 文件 反而。如果这个文件存在,它将被提供而不是 Sass,所以 重命名:

$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss 然后,删除所有 *= Sass 文件中的 require 和 *= require_tree 语句。反而, 使用 @import 导入 Sass 文件。

不要在 Sass 中使用 *= require 否则你的其他样式表将不会 能够访问 Bootstrap mixins 和变量。

阅读更多here

【讨论】:

谢谢!这解决了我的问题!【参考方案2】:

原答案

在我的情况下,我忘记在我的服务器中安装 yarn 命令。

所以,请在运行 rails 服务器之前安装 yarn。否则assets:precompile 将什么都不做,也不发出警告。

更新

另外,确保所有这些事情:

    文件存在:app/assets/stylesheets/application.css 其内容如下:
/* ...
 *= require_self
 *= require_tree .
 */
    还要检查文件app/assets/config/manifest.js
//= link application.css

【讨论】:

【参考方案3】:

为了让mutantkeyboard's answer更加清晰

我在将 Rails 应用程序部署为 docker 镜像时遇到了这个问题,该镜像将在没有像 Nginx 这样的 Web 服务器的 docker 容器中运行。

这是我修复它的方法

当您不想使用 NginxApache 等 Web 服务器从 /public 文件夹中提供静态文件时,此问题主要是在生产中引起的。

要在不使用 NginxApache 等网络服务器的情况下从 /public 文件夹中提供静态文件,请执行以下操作:

确保您使用以下方法预编译资产:

bundle exec rails assets:precompile

rails assets:precompile

这会将您的资产编译到/public 文件夹中

接下来,在您的 config/environments/production.rb 文件中,添加以下内容:

而不是这个:

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

使用这个:

config.public_file_server.enabled = true

这允许 Rails 提供静态文件而不是 Web 服务器

注意:为了提高性能,最好使用 Apache 或 Nginx 等 Web 服务器来提供静态文件。

【讨论】:

如果有人(例如@Dharman)从您的帖子中删除“希望这有帮助”,请不要这样做。在这里算是不错的编辑了。 最好不要在您的帖子中使用此措辞。主要原因是技术写作在这里是一种期望,并且有一些相当欺骗和需要的东西——它有点像“请给我投票”。但是,没有必要提出这样的要求 - 好的帖子会很自然地被点赞。 只是关于统计数据的简短说明 - 我看到您的帖子末尾有 344 个“仅此而已”实例,以及 323 个“希望有帮助”的实例。这些签收不会增加任何价值,而且代表着相当多的维修工作。 我为大量的笔记道歉,但您的帐户敲响了很多警钟。您似乎习惯于反射性地回滚对您的材料所做的编辑。我已经回滚了其中一些,并计划也回滚一些。如果您不同意,请向版主举报 - 所做的编辑看起来不错。

以上是关于Rails:application.css 不在资产管道中的主要内容,如果未能解决你的问题,请参考以下文章

尽管有变化,Rails 仍使用缓存的 application.css

rails - 在生产模式下找不到 application.css 资产

rails 3.1.0 ActionView::Template::Error(application.css 未预编译)

开发中的 rails 3.1 资产管道 css 缓存

stylesheet_pack_tag 在带有 webpacker gem 的 rails 5.1 中找不到 app/javascript/src/application.css

CSS中的Rails预编译错误