加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 在heroku的静态网站中加载css文件

发布时间:2020-12-17 03:03:04 所属栏目:百科 来源:网络整理
导读:我的config.ru如下: use Rack::Static,:urls = ["/images"],:root = "public"run lambda { |env| [ 200,{ 'Content-Type' = 'text/html','Cache-Control' = 'public,max-age=86400' },File.open('public/index.html',File::RDONLY) ]} 当我在本地加载它时,
我的config.ru如下:

use Rack::Static,:urls => ["/images"],:root => "public"

run lambda { |env|
  [
    200,{
      'Content-Type'  => 'text/html','Cache-Control' => 'public,max-age=86400' 
    },File.open('public/index.html',File::RDONLY)
  ]
}

当我在本地加载它时,网站看起来很好,但是当我在Heroku上运行时,我在浏览器控制台中为CSS文件收到以下错误消息:

Resource interpreted as Stylesheet but transferred with MIME type text/html.

知道我为什么会收到这些错误吗?

示例站点:http://salus8.heroku.com.

解决方法

您的应用目前以两种不同的方式响应请求.通过搜索/ public / images文件夹并返回与请求匹配的任何文件来提供以/ images开头的请求.通过运行lambda块来提供任何其他请求,该块返回index.html文件,其内容类型为text / html.

这适用于任何其他请求,因此当您的页面引用css文件并且浏览器尝试获取它时,您的应用程序将返回带有HTML内容类型的index.html页面,因此会显示有关MIME类型的警告.

解决这个问题的一种方法是将/ css添加到静态中间件处理的URL列表中:

use Rack::Static,:urls => ["/images","/css"],:root => "public"

并将您的css文件放在public / css目录中(因为我写的,看起来你已经完成了这个).

这可以解决您当前的问题,但是如果您想在顶层目录中拥有多个HTML页面,则可能会遇到问题.

实现一个为任何没有路径的请求提供index.html的静态站点的另一个解决方案,就是你在这里尝试做的事情,可能是使用rack-rewrite gem和Rack :: File应用程序.将gem’port-rewrite’添加到您的Gemfile中,然后像这样使用config.ru:

require 'rack/rewrite'

use Rack::Rewrite do
  rewrite "/","/index.html"
end

run Rack::File.new("public")

这将使用匹配文件(如果存在)响应所有请求,并且任何没有路径的请求都将获得index.html. (请注意,对于主目录下的子目录请求,它不会为index.html提供服务).

如果您正在使用Heroku的Cedar堆栈,您还可以查看faking a php app in order to get “real” static hosting with Apache.

我不知道为什么这会在本地工作,但不能在Heroku上工作,除非你只是直接在浏览器中打开文件.您是在本地运行服务器(例如使用机架)还是直接查看文件?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读