application.css不在资产管道中

时间:2019-06-15 21:05:35

标签: heroku ruby-on-rails-5

我知道这是一个老问题,但是没有解决办法解决我的问题。

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

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

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

我不知道怎么了。

我真的尝试了所有关于stackoverflow的答案,但都没有成功:(

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

这是我得到的错误: enter image description here

3 个答案:

答案 0 :(得分:1)

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

因此,请在运行Rails服务器之前安装“ yarn”。否则,“ assets:precompile”将不执行任何操作,也不会发出警告。

答案 1 :(得分:0)

好,第一件事。

您在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样式:

     

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

然后它说:

  

确保文件具有.scss扩展名(或Sass语法为.sass)。如果   您刚刚生成了一个新的Rails应用,它可能带有.css文件   代替。如果此文件存在,将代替Sass进行投放,因此   重命名:

     

$ mv应用程序/资产/样式表/application.css   app / assets / stylesheets / application.scss然后,删除所有* =   Sass文件中的require和* = require_tree语句。代替,   使用@import导入Sass文件。

     

请勿在Sass中使用* = require,否则您的其他样式表将不会   能够访问Bootstrap mixin和变量。

了解更多here

答案 2 :(得分:0)

为了让mutantkeyboard's answer更加清晰

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

这是我修复它的方法

当您不想使用 NginxApache 等网络服务器从 /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 服务器提供静态文件。

仅此而已。