0

Apache 2にパッセンジャーを正しくインストールしました(またはおそらくインストールしていません)。ラックは機能しますが、sinatraは404を出し続けます。

これが機能するものです: config.ru

#app = proc do |env|
  return [200, { "Content-Type" => "text/html" }, "hello <b>world</b>"]  
end
run app

ここでも機能します: app.rb (以下を参照) をruby​​ app.rbで実行し、localhost:4567/about および / を調べます。

アプリを再起動すると、正しい Hello World が表示されます。w00t。

しかし、その後、建物に入るシナトラがあります: config.ru

require 'rubygems'
require 'sinatra'

root_dir = File.dirname(__FILE__)

set :environment, ENV['RACK_ENV'].to_sym
set :root,        root_dir
set :app_file,    File.join(root_dir, 'app.rb')
disable :run

run Sinatra::Application

app.rb

require 'rubygems'
require 'sinatra'

get '/' do 
 "Hallo wereld!"
end

get '/about' do
 "Hello world, it's #{Time.now} at the server!"
end

これにより、404 が返され続けます。 /var/logs/apache2/error.logには、これらが「404」として正しく表示され、気になることがあります。

83.XXXXXXXXX - - [30/May/2010 16:06:52] "GET /about " 404 18 0.0007
83.XXXXXXXXX - - [30/May/2010 16:06:56] "GET / " 404 18 0.0007

気になったのは、/ と /about の後のスペースです。apache や sinatra は /%20 のように /[スペース] を探しに行きますか?

この問題が何に関連しているかを誰かが知っている場合、おそらく既知のバグ (私が見つけられなかった) または既知の落とし穴ですか? 多分私はただ愚かで、「それはすべて間違っていますか?」

それ以外の場合は、実行中のラック、sinatra、またはパッセンジャー アプリでより多くの開発者データを取得、読み取り、またはログに記録する場所に関するヒントも役立ちます。たとえば、sinatra が探しているものを確認するためです。

その他の情報: 実行中の ubuntu 9.04、apache2-mm-prefork (deb)、mod_php5、ruby 1.8.7、パッセンジャー 2.2.11、sinatra 1.0

4

2 に答える 2

4

app.rb にルートをロードしていません。これを行うには、config.ru で置き換えrequire 'sinatra'ますrequire File.join(File.dirname(__FILE__), 'app.rb')

root_dir = File.dirname(__FILE__)
app_file = File.join(root_dir, 'app.rb')
require app_file

set :environment, ENV['RACK_ENV'].to_sym
set :root,        root_dir
set :app_file,    app_file
disable :run

run Sinatra::Application

set :app_fileあなたのためにそれらをロードしません。

于 2010-05-30T18:44:00.963 に答える
0

require sinatraを aに置き換えるだけでrequire 'app'準備完了です。

于 2010-08-25T15:37:29.560 に答える