2017-02-12 7 views
0

Ich habe eine Route funktioniert gut in meiner Entwicklungsumgebung, aber aus irgendeinem Grund funktioniert es nicht in der Produktion und ich kann nicht herausfinden, warum.Schienen Routen unterschiedlich in Entwicklung und Produktion

Wenn ich in meiner Entwicklungsumgebung zu http://localhost:3000/api/v1/register_panelist?api_key=ff4a6fa1c975693bedc2122e6943946b gehe, funktioniert es großartig.

Allerdings, wenn ich gehe http://example.com/api/v1/register_panelist?api_key=ff4a6fa1c975693bedc2122e6943946b es nicht auflösen, und landet auf eine "Seite nicht gefunden", die der Fang ist alle Route am unteren Rand meiner Routen-Datei.

In meiner routes.rb Datei Ich habe diese:

constraints(ApiConstraint) do 

    namespace :api, defaults: {format: 'json'} do 
    namespace :v1, defaults: {format: 'json'} do 

     match "register_panelist", to: "appusers#register_panelist", via: 'get' 
     match "get_surveys", to: "appusers#get_surveys", via: 'get'  

    end 
    end 

    match "api/v1/*path", to: "api/v1/misc#api_not_found_404", via: :all, format: 'json' 
end 

... 
#at the very bottom 
match "*path", to: "static_pages#not_found_404", via: :all, format: false #, :constraints => {:format => [:html, :png]} 

In meiner Entwicklungsumgebung um es richtig zu lösen scheint. Aber in der Produktion scheint es bis zum Ende der routes.rb Datei zu fallen.

Irgendwelche Ideen warum?

EDIT: Hinzufügen von Logs:

Produktion:

production.log — I, [2017-02-12T11:55:31.455331 #27545] INFO -- : Started GET "/api/v1/register_panelist.json?api_key=ff4a6fa1c975693bedc2122e6943946b&country_id=9&birthday_year=1989&birthday_month=2&birthday_day=16&gender=42198&hispanic=42200&zip=10022&state=45700&ethnicity=42215&standard_relationship=42232&standard_education=42243&standard_hhi_us=43511" for 75.100.38.224 at 2017-02-12 11:55:31 +0000 
production.log — I, [2017-02-12T11:55:31.606946 #27545] INFO -- : Prod? true 
production.log — I, [2017-02-12T11:55:31.607886 #27545] INFO -- : subdomain: 
production.log — I, [2017-02-12T11:55:31.607948 #27545] INFO -- : protocol: https:// 
production.log — I, [2017-02-12T11:55:31.608020 #27545] INFO -- : Prod? true 
production.log — I, [2017-02-12T11:55:31.608052 #27545] INFO -- : subdomain: 
production.log — I, [2017-02-12T11:55:31.608086 #27545] INFO -- : protocol: https:// 
production.log — I, [2017-02-12T11:55:31.617812 #27545] INFO -- : Processing by StaticPagesController#not_found_404 as HTML 
production.log — I, [2017-02-12T11:55:31.617925 #27545] INFO -- : Parameters: {"api_key"=>"ff4a6fa1c975693bedc2122e6943946b", "country_id"=>"9", "birthday_year"=>"1989", "birthday_month"=>"2", "birthday_day"=>"16", "gender"=>"42198", "hispanic"=>"42200", "zip"=>"10022", "state"=>"45700", "ethnicity"=>"42215", "standard_relationship"=>"42232", "standard_education"=>"42243", "standard_hhi_us"=>"43511", "path"=>"api/v1/register_panelist.json"} 
production.log — I, [2017-02-12T11:55:31.636463 #27545] INFO -- : Rendered text template (0.2ms) 
production.log — I, [2017-02-12T11:55:31.636883 #27545] INFO -- : Completed 404 Not Found in 19ms (Views: 11.4ms | ActiveRecord: 0.0ms) 

Entwicklung:

Started GET "/api/v1/register_panelist?api_key=ff4a6fa1c975693bedc2122e6943946b&country_id=9&birthday_year=1989&birthday_month=2&birthday_day=16&gender=42198&hispanic=42200&zip=53593&state=45700&ethnicity=42215&standard_relationship=42232&standard_education=42243&standard_hhi_us=43511" for ::1 at 2017-02-12 05:56:46 -0600 
Prod? false 
subdomain: 
protocol: http:// 
Processing by Api::V1::AppusersController#register_panelist as JSON 
    Parameters: {"api_key"=>"ff4a6fa1c975693bedc2122e6943946b", "country_id"=>"9", "birthday_year"=>"1989", "birthday_month"=>"2", "birthday_day"=>"16", "gender"=>"42198", "hispanic"=>"42200", "zip"=>"53593", "state"=>"45700", "ethnicity"=>"42215", "standard_relationship"=>"42232", "standard_education"=>"42243", "standard_hhi_us"=>"43511"} 
    User Load (18.7ms) SELECT "users".* FROM "users" WHERE "users"."api_key" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["api_key", "ff4a6fa1c975693bedc2122e6943946b"]] 

rake routes Ausgang von der Entwicklung:

api_v1_register_panelist GET /api/v1/register_panelist(.:format)               api/v1/appusers#register_panelist {:format=>"json"} 
            api_v1_get_surveys GET /api/v1/get_surveys(.:format)                 api/v1/appusers#get_surveys {:format=>"json"} 

und Produktionsserver:

api_v1_register_panelist GET /api/v1/register_panelist(.:format)               api/v1/appusers#register_panelist {:format=>"json"} 
            api_v1_get_surveys GET /api/v1/get_surveys(.:format)                 api/v1/appusers#get_surveys {:format=>"json"} 
+0

können Sie Anfrageprotokolle für dev & prod teilen? – Abhishek

Antwort

1

Ich würde vermuten, dass es etwas in der Web-Server-Konfiguration ist, der die Anforderung usurpiert, bevor es zu Rails (mod Rewrite oder dergleichen), oder dass die Mount-Punkt Einstellung übergeben wird der Ausführungsumgebung von Rails innerhalb Ihres Webservers (z Unicorn in Nginx, Passenger in Apache) oder vielleicht eine Middleware, die von WEBrick und Ihrem Live-Server unterschiedlich gehandhabt wird.

Was auch immer der Fall ist, würde ich, indem Sie die Routen auf dem Server starten:

rake routes 

und stellen Sie sicher, sie sind das, was Sie erwarten. Überprüfen Sie als Nächstes die Schienenprotokolle und vergewissern Sie sich, dass die Anforderung tatsächlich von Rails verarbeitet und nicht vom Webserver oder einer Middleware abgefangen wird. Wenn Sie den Log-Level zum Debuggen hochfahren, sollte er Details darüber geben, wie er genau behandelt wird. Dies sollte Ihnen zumindest den nächsten Schritt für die Suche geben.

+0

Ich habe versucht, den Loglevel auf ': debug 'zu stellen und die Produktionsergebnisse gepostet. Es scheint tatsächlich die gleiche Menge an Ausgabe wie ': info' zu haben. Irgendwelche cleveren Ideen? –

+0

@TomHammond - stellen Sie sicher, dass Sie neu starten, nachdem Sie es geändert haben, dass Sie es in der richtigen Umgebung eingestellt haben und dass Ihre Anwendung tatsächlich in der Umgebung ausgeführt wird, die Sie dachten (vermutlich "Produktion"). – jpgeek

+0

@TomHammond - mit Blick auf die Protokolle oben sind die Anforderungen unterschiedlich. der für die Entwicklung heißt/api/v1/register_panelist? api_key = ff4a6f ... aber der für die Produktion ruft api/v1/register_panelist.json? api_key = ff4a .... auf, so dass das Format in der Entwicklung fehlt. Wie für das Ergebnis unten, würde ich definitiv nicht so bleiben - ich würde das eigentliche Problem finden. Das Verlassen der gleichen Route, die zweimal eingegeben wurde, wird dich um 2:00 Uhr an einem Sonntag mit einem schwierig zu debuggenden Problem verfolgen. – jpgeek

0

Ich bin nicht positiv, warum dies funktioniert, aber es scheint, ich musste meine routes.rb Datei aktualisieren zweimal diese Zeile zu rufen - einmal innerhalb der Grenzen, die Routen in meiner Entwicklungsumgebung zu finden, und einmal ohne gefunden zu werden Produktion:

constraints(ApiConstraint) do 

    namespace :api, defaults: {format: 'json'} do 
    namespace :v1, defaults: {format: 'json'} do 

     #find in development 
     match "register_panelist", to: "appusers#register_panelist", via: 'get' 
     match "get_surveys", to: "appusers#get_surveys", via: 'get'  

    end 
    end 

    match "api/v1/*path", to: "api/v1/misc#api_not_found_404", via: :all, format: 'json' 
end 

#find in production 
match "api/v1/register_panelist", to: "api/v1/appusers#register_panelist", via: 'get' 
match "api/v1/get_surveys", to: "api/v1/appusers#get_surveys", via: 'get' 
+0

Ich lief gerade in genau diesem gleichen Problem. Irgendein Wort darüber, warum das passiert? – KenneyE

+0

Nicht sicher, dass ich es jemals herausgefunden habe. Ein Blick zurück auf den Code - der Namespace scheint das Format von json im Entwickler zu haben, nicht im Produktionsbereich. Also vielleicht etwas damit zu tun (auch wenn json in der Serienversion noch zurückgegeben wird) ... hmmm. –

+0

Nachdem ich etwas mehr gegraben habe, fand ich dieses Problem https://github.com/rails/rails/issues/5798, was es vielleicht erklären könnte. Es scheint, als würde dieses Problem nur auftreten, wenn Ihr Namespace ein ActiveRecord-Modell ist, aber ich bezweifle, dass Sie ein Modell namens "Api" oder "V1" haben, also bin ich mir nicht sicher .... – KenneyE

Verwandte Themen