2017-02-12 2 views
0

У меня есть маршрут, который отлично работает в моей среде разработки, но по какой-то причине он не работает в производстве, и я не могу понять, почему.Rails Маршруты разные в разработке и производстве

Когда я иду в http://localhost:3000/api/v1/register_panelist?api_key=ff4a6fa1c975693bedc2122e6943946b в моей среде разработки, он отлично работает.

Однако, когда я перехожу на http://example.com/api/v1/register_panelist?api_key=ff4a6fa1c975693bedc2122e6943946b, он не разрешается и заканчивается падением на «страницу не найдена», которая является ловушкой всего маршрута в нижней части моего файла маршрутов.

В моем routes.rb файле у меня есть это:

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]} 

В моей среде разработки, кажется, правильно решить. Но в производстве он, кажется, проваливается к нижней части файла routes.rb.

Любые идеи, почему?

EDIT: Добавление Logs:

Производство:

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) 

развития:

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 выход из развития:

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"} 

и производство серверов:

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

Вы можете обмениваться журналами запросов для dev & prod? – Abhishek

ответ

1

Я думаю, что есть что-то в конфигурации веб-сервера, узурпации запрос, пока он не перешел к Rails (мод переписывания и т.п.), или установки точки монтирования среды выполнения Rails на вашем веб-сервере (например, Единорог в Nginx, Пассажир в Apache) или, возможно, часть промежуточного программного обеспечения, которое по-разному обрабатывается WEBrick и вашим сервером.

В любом случае, я хотел бы начать с проверки маршрутов на сервере:

rake routes 

и убедитесь, что они то, что вы ожидаете. Затем проверьте журналы рельсов и убедитесь, что запрос фактически обрабатывается Rails и не перехватывается веб-сервером или некоторым промежуточным программным обеспечением. Если вы проверите уровень журнала до отладки, он должен подробно рассказать о том, как он обрабатывает его. Это должно по крайней мере дать вам следующий шаг для того, где искать.

+0

Я попытался включить уровень журнала в ': debug' и опубликовал результаты производства. На самом деле он выглядит так же, как и «info». Какие-нибудь умные идеи? –

+0

@TomHammond - убедитесь, что вы перезапустили его после изменения, что вы установили его в правильном окружении и что ваше приложение фактически работает в среде, которая, по вашему мнению, была (предположительно «production»). – jpgeek

+0

@TomHammond - глядя на журналы выше, запросы разные. один для разработки - это вызов/api/v1/register_panelist? api_key = ff4a6f ... но тот, который для производства вызывает api/v1/register_panelist.json? api_key = ff4a .... поэтому формат отсутствует в разработке. Что касается результата ниже, я бы определенно не оставил его таким образом - я бы нашел актуальную проблему. Оставляя тот же самый маршрут, который вводится дважды, вы вернетесь, чтобы преследовать вас с трудной проблемой отладки в 2 часа ночи в воскресенье. – jpgeek

0

Я не уверен, почему это работает, но мне кажется, мне пришлось обновить мой файл routes.rb, чтобы вызывать эту строку дважды - один раз в рамках ограничений, чтобы найти маршруты в моей среде разработки, и один раз, не будучи найденным в производство:

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

Я просто столкнулся с этой же проблемой. Любое слово о том, почему это происходит? – KenneyE

+0

Не уверен, что я когда-либо это понял. Еще раз взглянув на код - пространство имен, похоже, имеет формат json в dev, а не в производственном. Так что, возможно, что-то с этим связано (хотя json все еще возвращается в производственной версии) ... хммм. –

+0

После того, как я прокопал еще несколько, я нашел эту проблему https://github.com/rails/rails/issues/5798, которая могла бы это объяснить. Похоже, эта проблема применима только в том случае, если ваше пространство имен является моделью ActiveRecord, но я сомневаюсь, что у вас есть модель под названием «Api» или «V1», поэтому я не уверен ... – KenneyE

Смежные вопросы