ruby – 在heroku的静态网站中加载css文件
我的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的静态站点的另一个解决方案,就是你在这里尝试做的事情,可能是使用 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上工作,除非你只是直接在浏览器中打开文件.您是在本地运行服务器(例如使用机架)还是直接查看文件? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |