0

いくつかのチュートリアルに従って、アプリの API を作成しました。Deviseのレジストレーションとセッションコントローラーを継承したカスタムコントローラーを配置しました。ここでたくさんの質問/回答を調べましたが、問題を解決できません。

私のソリューションは Ubuntu VM では機能しますが、ec2 インスタンスでは機能しません。新しいクラスの最初の行は次のとおりです。

class Api::V1::SessionsController < Devise::SessionsController

そして、routes.rb からのいくつかのコード:

devise_for :users

namespace :api do
namespace :v1 do
 devise_scope :user do
   post 'registrations' => 'registrations#create', :as => 'register'
   post 'sessions' => 'sessions#create', :as => 'login'
   delete 'sessions' => 'sessions#destroy', :as => 'logout'
 end
 get 'tournaments' => 'tournaments#index', :as => 'tournaments'
end
end

私のカスタム コントローラーは Api/V1 ディレクトリにあり、正しくルーティングされているように見えます。エラーは次のとおりです (トレースの一部を含む)。

        
ActionController::RoutingError (uninitialized constant Api):
  activesupport (3.2.13) lib/active_support/inflector/methods.rb:230:in `block in constantize'
  activesupport (3.2.13) lib/active_support/inflector/methods.rb:229:in `each'
  activesupport (3.2.13) lib/active_support/inflector/methods.rb:229:in `constantize'
  actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:69:in `controller_reference'
  actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:54:in `controller'
  actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:32:in `call'
  actionpack (3.2.13) lib/action_dispatch/routing/mapper.rb:42:in `call'
  journey (1.0.4) lib/journey/router.rb:68:in `block in call'
  journey (1.0.4) lib/journey/router.rb:56:in `each'
  journey (1.0.4) lib/journey/router.rb:56:in `call'
  actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612:in `call'
  rack-pjax (0.7.0) lib/rack/pjax.rb:12:in `call'
  mongoid (3.1.4) lib/rack/mongoid/middleware/identity_map.rb:34:in `block in call'
  mongoid (3.1.4) lib/mongoid/unit_of_work.rb:39:in `unit_of_work'
  mongoid (3.1.4) lib/rack/mongoid/middleware/identity_map.rb:34:in `call'
  warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.3) lib/warden/manager.rb:34:in `catch'
  warden (1.2.3) lib/warden/manager.rb:34:in `call'
  actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
  rack (1.4.5) lib/rack/etag.rb:23:in `call'
  rack (1.4.5) lib/rack/conditionalget.rb:35:in `call'
  actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in `call'
  remotipart (1.2.1) lib/remotipart/middleware.rb:27:in `call'
  actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
  actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in `call'

サーバーを稼働させるには、applications.rb で次のフラグを設定する必要がありました。

# Code is not reloaded between requests
config.cache_classes = false

# Full error reports are disabled and caching is turned on
config.consider_all_requests_local       = true
config.action_controller.perform_caching = false
4

1 に答える 1

1

これを試して:

devise_scope :user do
  post 'registrations' => 'api/v1/registrations#create', :as => 'register'
  post 'sessions' => 'api/v1/sessions#create', :as => 'login'
  delete 'sessions' => 'api/v1/sessions#destroy', :as => 'logout'
end

namespace :api do
  namespace :v1 do
    get 'tournaments' => 'tournaments#index', :as => 'tournaments'
  end
end

routes.rb を変更した後は、必ずサーバーを再起動してください。

コントローラーがディレクトリにあることを確認しますapi/v1(小文字のみを使用してください) 。

于 2013-07-26T00:15:48.167 に答える