【发布时间】:2010-12-14 14:31:26
【问题描述】:
我还没有确定这是 Apache 问题还是 Sinatra 问题,基本上,我们有一堆小应用程序在单个服务器上运行,我们只使用内置 webrick 实例部署它们并使用 apache 来重新- 将这些请求按子域路由到正确的端口。我正在使用 gollum,它是一个带有 git 持久层的 sinatra 应用程序,但是当它重定向时(在编辑操作之后)我得到了一个意外的应用程序路由。我不确定是否可以通过将启动选项传递给 Sinatra 或在应用程序的虚拟主机声明中配置重写规则来解决此问题。请在您的回答中包含您认为最好的选项以及如何完成的示例。 谢谢,
# apache virtualhost declaration
<VirtualHost *:80>
ServerName wiki.domain.com
DocumentRoot "/var/www/html"
ProxyPass / http://localhost:3006
ProxyPassReverse / http://localhost:3006
</VirtualHost>
用 sinatra 解决 GET 问题,例如
wiki.domain.com/Home
但在 sinatra 重定向上失败
# expected
wiki.domain.com/Home
# actual
wiki.domain.com:3006/Home
这里是 Sinatra 操作(来源:https://github.com/github/gollum/blob/master/lib/gollum/frontend/app.rb)
post '/edit/*' do
name = params[:splat].first
wiki = Gollum::Wiki.new(settings.gollum_path)
page = wiki.page(name)
format = params[:format].intern
name = params[:rename] if params[:rename]
wiki.update_page(page, name, format, params[:content], commit_message)
redirect "/#{CGI.escape(Gollum::Page.cname(name))}"
end
【问题讨论】: