0

我在 apache 2 上正确(或可能没有)安装了乘客。机架工作,但 sinatra 不断给出 404。

这是有效的: config.ru

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

这也是可行的:使用ruby​​ app.rb 运行 app.rb(见下文),然后查看 localhost:4567/about 和 /

重新启动应用程序,给了我一个正确的 hello world。w00吨。

但随后有 sinatra 进入大楼: 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 会去寻找 /[space],比如 /%20 吗?

如果有人知道这个问题与什么有关,也许是一个已知的错误(我找不到)或一个已知的陷阱?也许我只是愚蠢并得到“一切都错了”?

否则,任何关于在运行机架、sinatra 或乘客应用程序上获取、读取或记录更多开发人员数据的提示也会有所帮助:例如,查看 sinatra 正在寻找什么。

其他一些信息:运行 ubuntu 9.04、apache2-mm-prefork (deb)、mod_php5、ruby 1.8.7、passenger 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

只需将 a 替换为require sinatraarequire 'app'即可。

于 2010-08-25T15:37:29.560 回答