2016-12-14 6 views
0

Sourcey 튜토리얼로 레일 5 API를 수행했는데 이제 라우팅 오류가 발생합니다.Api 가로장 : 경로가 일치하지 않습니다.

컬 명령 curl -H "Authorization: Token token=8NjQH4YVWQdUIve4xDQBaArr" http://localhost:3000/v1/users 서버가

어떤 경로 일치를 실행하지 않습니다 '404 찾을 수 없습니다'라는 메시지와 '어떤 경로 일치'내 관점에서 제기되는 디스플레이 [GET] "/ V1/사용자"

그래서 나는 rails routes을 확인했습니다. 출력은 다음과 같습니다 ID

어떻게이 문제를 해결하기 :

v1_users GET /v1/users(.:format)  api/v1/users#index {:subdomain=>"api"} 
     POST /v1/users(.:format)  api/v1/users#create {:subdomain=>"api"} 
v1_user GET /v1/users/:id(.:format) api/v1/users#show {:subdomain=>"api"} 
     PATCH /v1/users/:id(.:format) api/v1/users#update {:subdomain=>"api"} 
     PUT /v1/users/:id(.:format) api/v1/users#update {:subdomain=>"api"} 
     DELETE /v1/users/:id(.:format) api/v1/users#destroy {:subdomain=>"api"} 

우리는 우리가 GET/V1/사용자 및 /이주의?

routes.rb :

Rails.application.routes.draw do 
    constraints subdomain: 'api' do 
    scope module: 'api' do 
     namespace :v1 do 
     resources :users 
     end 
    end 
    end 
end 

Users_controller.rb 및 api_controller.rb은 /애플리케이션/제어기/API/V1/ 내부. 당신이 코드의 다른 부분을해야 할 경우

(컨트롤러, 모델 ....)

답변

4

문제는 경로가 하위 도메인 제약 조건을 가지고 있다는 것입니다 주저하지 않습니다. 따라서 API는 http://api.example.com/v1/users에서만 사용할 수 있습니다.

apache 또는 nginx를 통해 가상 호스트를 설정하거나 호스트 파일을 편집하거나 Ngrok과 같은 서비스를 사용하지 않고 localhost와 함께 하위 도메인을 사용할 수 없습니다.

당신은 또한 대신 경로 제약 조건으로 변환 할 수 있습니다 :

Rails.application.routes.draw do 
    namespace :api do 
    namespace :v1 do 
     resources :users 
    end 
    end 
end 
+0

감사합니다 많이! 나는 'scope 모듈을 보자 :'api 'do'와 url http://api.example.com/v1/users와 함께 컬을 사용하기 위해 '네임 스페이스'api 'do'를 추가하지 않았다. – Tellimi

+0

네가 원한다면 대신 'http : // example.com/api/v1/users'를 입력하십시오. 하위 도메인이있는 레일 서버에 액세스 할 수 있도록 터널을 설정하면 경로를 변경할 필요가 없습니다. – max

관련 문제