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

Web*_*bie 4 heroku ruby-on-rails-5

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

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

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

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

我不知道出了什么问题。

我真的尝试了stackoverflow上的每个答案都没有成功:(

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

这是我得到的错误: 在此处输入图片说明

mut*_*ard 13

好的,第一件事。

您是否config.serve_static_files = trueproduction.rb文件config/environment夹下的文件中进行了设置。

由于我们在 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 混合和变量。

在这里阅读更多


Pro*_*ton 7

为了让mutantkeyboard的答案更加清晰

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

这是我修复它的方法

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

要从文件夹中提供静态文件而不使用NginxApache/public等 Web 服务器,请执行以下操作:

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

bundle exec rails assets:precompile
Run Code Online (Sandbox Code Playgroud)

或者

rails assets:precompile
Run Code Online (Sandbox Code Playgroud)

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

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

而不是这个:

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
Run Code Online (Sandbox Code Playgroud)

用这个:

config.public_file_server.enabled = true
Run Code Online (Sandbox Code Playgroud)

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

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

  • 关于统计数据的简单说明 - 我发现您的帖子末尾有 344 个“仅此而已”实例,以及 323 个“希望有帮助”。这些签核不会增加任何价值,而且需要大量的修复工作。 (3认同)
  • 如果有人(例如@Dharman)从您的帖子中删除了“希望这有帮助”,请保留此内容。这里被认为是一个很好的编辑。 (2认同)

Siw*_*申思维 5

就我而言,我忘记在我的服务器中安装 yarn 命令。

所以,请在运行 Rails 服务器之前安装“yarn”。否则“资产:预编译”将不做任何事情并且不发出警告。