当我部署到heroku时,打开日志并加载服务器日志。这是我遇到的错误...
ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.
我在堆栈溢出的另一篇文章中尝试了这些步骤:
好的,第一件事。
您是否在
config.serve_static_files = true
文件夹下的production.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 样式:
// 自定义引导变量必须在引导之前设置或导入。 @导入“引导程序”;
然后它说:
确保文件具有 .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 mixin 和变量。
但是这些都不起作用...我尝试了 ChatGPT 但老实说它主要告诉我同样的事情...我错过了一些东西,真的不知道是什么...
我不确定这是否正确,但
//= link application.scss
不在我的manifest.js
文件中,而在我的application.html.erb
中我有<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
。老实说,我不确定我哪里错了。我像这样初始化了 Rails 应用程序 rails new <name> --css=bootstrap --database=postgres
。后来我改变了我的SCSS文件。因为我认为 bootstrap 标志引起了骚动,所以我最终使用了 boostrap gem 并在我的 application.scss
中导入了 bootstrap。现在我尝试在heroku上部署并且发生了这种情况。另外,我还有一堆正在寻找 appliaction.bootstrap.scss
的脚本,但后来找不到里面的导入。我尝试删除它,并意识到我正在从 gem 和 @import 'bootstrap';
获取引导程序。我意识到我不需要该文件,也不需要脚本,这让我在这个错误消息游戏中继续前进。我觉得我几乎尝试了所有方法,有人知道如何提供帮助吗?
还有一件事。推送到 Heroku 成功。构建也成功了。只有当我真正进入该页面时,它才会中断......同样的事情也发生在
image_tag
助手上。通过添加扩展名 my_picture.png
而不仅仅是 my_picture
来解决这个问题。也许我愚蠢地尝试了<%= stylesheet_link_tag "application.scss", "data-turbo-track": "reload" %>
,但这使它寻找application.scss.css
,我无法使用它,因为它不是scss...
所以问题出在
manifest.js
文件中。通往application.scss
的路径是错误的。但我添加了 //= link_tree ../stylesheets
并且有效。我还将其添加到我的 assets.rb
文件中。
Rails.application.config.assets.paths << Rails.root.join('assets')
Rails.application.config.assets.paths << Rails.root.join('app/assets')
Rails.application.config.assets.paths << Rails.root.join('../assets')
并将其添加到我的
production.rb
文件中。
config.public_file_server.enabled = true
config.assets.css_compressor = :sass
config.assets.compile = true
这样就完成了!