我是Ruby开发的新手。我有一个简单的ruby应用程序,由Apache上的Passenger提供支持。我的来源看起来像这样
class Demo
def call(env)
req = Rack::Request.new(env)
text = req.params['text']
Rack::Response.new.finish do |res|
res['Content-Type'] = 'text/html'
res.status = 200
res.write text
end
end
end
run Demo.new
即使内容类型设置为text / html。我注意到返回的http头是httpd / unix-directory。这是标题的样子。
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Sun, 20 Jul 2014 18:51:29 GMT
X-Powered-By: Phusion Passenger 4.0.37
Status: 200 OK
Transfer-Encoding: chunked
Content-Type: httpd/unix-directory
如果我不通过Apache / Passenger vhost访问,而是直接从控制台运行rackup config.ru
并通过:9292
访问,那么一切似乎都可以。
为什么会这样?我该如何解决?
答案 0 :(得分:0)
根据this thread,这可能是mod_mime
的apache配置问题:
Apache的mod_mime只要注意到当前URL映射到目录,就将Content-Type设置为httpd / x-unix目录。通常,Web应用程序通过提供自己的Content-Type标头来覆盖此Content-Type,但node-env不会这样做。浏览器会看到httpd / x-unix目录的Content-Type并尝试下载它。
您可以通过禁用mod_mime来解决此问题。我将修改4.0.45以取消设置httpd / x-unix-directory标头。
答案 1 :(得分:0)
正如Uri Agassi所说。因此,您需要修改应用程序以设置Content-Type标头,或者需要升级到Phusion Passenger 4.0.45或更高版本。