我知道这是一个老问题,但是没有解决办法解决我的问题。
我是Ruby on Rails的新手,刚刚使用postgres数据库创建了项目,以便能够将项目上传到Heroku。
当我启动Rails服务器时,出现错误“资产管道中不存在application.css”。
我正在使用bootstrap 4 gem,这要求您将application.css重命名为application.scss。
我不知道怎么了。
我真的尝试了所有关于stackoverflow的答案,但都没有成功:(
请帮助我,我在做什么错了?
答案 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 容器中运行。
这是我修复它的方法:
当您不想使用 Nginx 或 Apache 等网络服务器从 /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 服务器提供静态文件。
仅此而已。