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

zengzsys  于 2022-12-27  发布在  其他
关注(0)|答案(5)|浏览(159)

我知道这是一个老问题,但没有答案是解决我的问题。
我是Ruby on Rails的新手,刚刚用PostgreSQL数据库创建了一个项目,只是为了能够将项目上传到Heroku。
当我启动rails服务器时,我收到错误“application.css不在资产管道中”。
我使用的是bootstrap 4 gem,这需要您将applications.css重命名为application.scss。
我不知道出了什么事。
我真的尝试了stackoverflow上的每一个答案,都没有成功:(
请帮帮我,我做错了什么?
这是我得到的错误:

5cnsuln7

5cnsuln71#

好吧,第一件事。
您是否在config/environment文件夹下的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“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混合和变量。
了解更多here

tvokkenx

tvokkenx2#

原始答案

在我例子中,我忘记在服务器中安装yarn命令。
因此,请在运行rails服务器之前安装yarn。否则assets:precompile将不执行任何操作,也不会发出任何警告。

更新

同时,确保所有这些事情:
1.文件存在:app/assets/stylesheets/application.css
1.其内容如下所示:

/* ...
 *= require_self
 *= require_tree .
 */

1.还检查文件app/assets/config/manifest.js

//= link application.css
pod7payv

pod7payv3#

为了使mutantkeyboard's answer更加清晰
我在将Rails应用程序部署为Docker映像时遇到了这个问题,该映像将在没有Nginx这样的Web服务器的Docker容器中运行。

    • 这就是我的方法**

此问题主要是在生产中,当您不想使用NginxApache等Web服务器提供/public文件夹中的静态文件时引起的。
要从/public文件夹提供静态文件,而不使用Web服务器(如NginxApache),请执行以下操作:
确保使用以下工具预编译资源:

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服务器来提供静态文件。
at0kjp5o

at0kjp5o4#

只需重新安装yarn并预编译我们的资产:
yarn的parkages不能在github上运行...要解决这个问题,请重新安装yarn:

yarn

和预编译资产:

bundle exec rails assets:precompile
sbdsn5lh

sbdsn5lh5#

Rails 7.0.4 ruby 3.1.2我解决了yarn build在缺少application.js时的问题,但在缺少application.css的情况下,yarn build:css只是执行了此操作

相关问题