Ruby(机架/乘客应用程序)返回httpd / unix目录内容类型而不是text / html

时间:2014-07-20 19:02:03

标签: ruby apache unix passenger

我是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访问,那么一切似乎都可以。

为什么会这样?我该如何解决?

2 个答案:

答案 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或更高版本。