L’application Sinatra modulaire retourne 404 sous Passager

J’ai une application Sinatra modulaire qui fonctionne bien lorsqu’elle est exécutée avec un rackup. Le fichier config.ru est défini comme suit:

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

Lorsque je lance l’application sous nginx / passenger, je ne reçois que des 404, même pour la route ‘/’. Suspectant que quelque chose n’allait pas avec le routage, j’ai modifié config.ru comme suit:

 run My::Controllers::Default 

Après avoir redémarré nginx, on m’a servi la page par défaut de l’application. Cependant, la page par défaut de l’application atteint la route api pour obtenir de la documentation à afficher, et cette partie retourne un 404. Étant donné que config.ru est capable d’exécuter le contrôleur par défaut, je suis sûr que le problème n’a rien à voir faire avec être capable de charger tous les fichiers ruby ​​pertinents – ce qui semble être le problème dans d’autres questions connexes que j’ai trouvé sur SO.

Dans cet esprit, j’ai modifié config.ru comme suit:

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

À ce stade, je suis de retour pour ne plus avoir que des 404, même pour la route “/”. Il semble que la déclaration de carte confond le serveur Web et le rend incapable de trouver les routes correctes.

Si je lance l’application en utilisant rackup, tout se comporte comme prévu, alors je ne sais pas vraiment ce que je vois.

Je me souviens que c’est la réponse. Dites-moi si cela marche pour vous. Si c’est le cas, j’accepterai la réponse pour que d’autres la trouvent.

Middleware

Un bug dans passager l’empêche de comprendre la déclaration de carte dans config.ru 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 

config.ru

 configure do use PassengerFix end