Web*_*bie 4 heroku ruby-on-rails-5
我知道这是一个老问题,但没有答案可以解决我的问题。
我是 Ruby on Rails 的新手,刚刚使用 PostgreSQL 数据库创建了项目,以便能够将项目上传到 Heroku。
当我启动 Rails 服务器时,我收到错误“资产管道中不存在 application.css”。
我正在使用 bootstrap 4 gem,这要求您将 applications.css 重命名为 application.scss。
我不知道出了什么问题。
我真的尝试了stackoverflow上的每个答案都没有成功:(
请帮帮我,我做错了什么?
mut*_*ard 13
好的,第一件事。
您是否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 "引导程序";
然后它说:
确保文件具有 .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 混合和变量。
在这里阅读更多
我在将 Rails 应用程序部署为 docker 映像时遇到了这个问题,该映像将在没有 Nginx 等 Web 服务器的 docker 容器中运行。
这是我修复它的方法:
此问题主要是在生产中引起的,当您不想使用Nginx或Apache/public
等 Web 服务器从文件夹中提供静态文件时。
要从文件夹中提供静态文件而不使用Nginx或Apache/public
等 Web 服务器,请执行以下操作:
确保使用以下方式预编译您的资产:
bundle exec rails assets:precompile
Run Code Online (Sandbox Code Playgroud)
或者
rails assets:precompile
Run Code Online (Sandbox Code Playgroud)
这会将您的资产编译到/public
文件夹中
接下来,在您的config/environments/production.rb
文件中添加以下内容:
而不是这个:
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
Run Code Online (Sandbox Code Playgroud)
用这个:
config.public_file_server.enabled = true
Run Code Online (Sandbox Code Playgroud)
这允许 Rails 提供静态文件而不是 Web 服务器
注意:为了提高性能,最好使用 Apache 或 Nginx 等 Web 服务器来提供静态文件。
归档时间: |
|
查看次数: |
7128 次 |
最近记录: |