我有一个模块化的sinatra应用程序,在使用rackup执行时运行良好。config.ru文件定义如下:

map '/' do
  run My::Controllers::Default
end

map '/api' do
  run My::Controllers::Api
end

当我在nginx/passenger下运行这个应用程序时,除了404,我什么也得不到,即使是在'/'路线上。怀疑路由有问题,我修改了config.ru如下:
run My::Controllers::Default

重新启动nginx后,我得到了应用程序的默认页面。但是,应用程序的默认页面进入api路由以获取要显示的文档,该部分返回404。考虑到config.ru能够运行默认控制器,我确信这个问题与能够加载所有相关的ruby文件无关——这似乎是我在上面发现的其他相关问题中的问题。
考虑到这一点,我修改了config.ru如下:
map '/api' do
  run My::Controllers::Api
end

run My::Controllers::Default

在这一点上,我只得到404,即使是在'/'路线似乎MAP语句混淆了Web服务器,使其无法找到正确的路由。
如果我只是使用RackUp运行应用程序,一切都会按预期运行,所以我真的很难解释我看到了什么。

最佳答案

我记得这就是答案。如果对你有用就告诉我如果是的话,我会“接受”这个答案,这样其他人就会找到它。
中间件
乘客中的错误使其无法理解config.ru中的map语句https://groups.google.com/forum/#!msg/phusion-passenger/PoEEp9YcWbY/1y0QL_i3tHYJ

class PassengerFix

  def initialize(app)
    @app = app
  end

  def call(env)
    env["SERVER_NAME"] = env["HTTP_HOST"]
    return @app.call(env)
  end

end

配置ru
configure do
  use PassengerFix
end

关于ruby - 模块化Sinatra应用返回乘客下的404,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27787352/

10-14 01:38