部署一个sinatra应用程序与乘客只给404,页面没有找到。一个简单的机架应用程序工作

时间:2010-05-30 16:27:32

标签: ruby sinatra passenger deployment rack

我已经正确地(或者可能没有)在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和/

重新启动应用程序,给了我一个正确的问候世界。 w00t。

然后有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

让我担心的是/和/之后的空间。 apache或sinatra会去寻找/ [空间],比如/%20?

如果有人知道这个问题涉及到什么,可能是一个已知的错误(我找不到)或已知的问题? 也许我只是愚蠢而且“一切都错了?”

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

其他一些信息: 运行ubuntu 9.04,apache2-mm-prefork(deb),mod_php5,ruby 1.8.7,乘客2.2.11,sinatra 1.0

2 个答案:

答案 0 :(得分:3)

您没有在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不会为您加载它们。

答案 1 :(得分:0)

只需将require sinatra替换为require 'app',即可开始使用。