0
這裏可能是一個新手問題。我試圖通過Passenger和Apache部署一個Sinatra應用程序。當部署在VirtualHost根目錄時,該應用程序完美工作,但在嘗試將其部署到子URI時,無法正確處理表單帖子。如何處理部署到子URI的Sinatra應用程序中的表單?
A中的應用程序的非常簡化的版本如下:
測試app.rb:
require 'sinatra/base'
require 'haml'
class TestApp < Sinatra::Base
get '/' do
haml :ask
end
post '/submit' do
if params[:test_string].nil? || params[:test_string].empty?
redirect '/'
end
@test_string = params[:test_string]
haml :result
end
end
layout.haml:
!!!
%html
%head
%title Test App
%body
= yield
ask.haml:
%form{:action => '/submit', :method => 'post'}
%legend
Get a string
%p
%label{:for => ''} Please enter a string:
%input{:type => 'textbox', :name => 'test_string', :id => 'test_string'}
%p
%input{:type => 'submit', :value => 'Submit >>>'}
result.haml:
%p== Here's your string: #{ @test_string }
什麼似乎正在發生的是,表單POST不會正確的URI - 它似乎忽略子URI配置,並且要到虛擬主機的根在那裏,當然,還有沒有代碼來處理路線。我已經檢查並重新檢查了Apache配置,這似乎不是問題所在。
<VirtualHost *:80>
ServerName my.domain.com
DocumentRoot /var/websites/home
<Directory /var/websites/home>
Allow from all
Options -MultiViews
</Directory>
Alias /test-app /var/websites/test-app/public
<Location /test-app>
PassengerBaseURI /test-app
PassengerAppRoot /var/websites/test-app
</Location>
<Directory /var/websites/test-app/public>
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>
有什麼辦法(比硬編碼的形式等),以確保表單發送到子URI,在那裏我的應用程序可以處理的,而不是發佈到虛擬主機的根呢,?