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 容器中运行。
这是我修复它的方法:
当您不想使用 Nginx 或 Apache 等 Web 服务器从 /public
文件夹中提供静态文件时,此问题主要是在生产中引起的。
要在不使用 Nginx 或 Apache 等网络服务器的情况下从 /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 未预编译)
stylesheet_pack_tag 在带有 webpacker gem 的 rails 5.1 中找不到 app/javascript/src/application.css