Маршруты пространства имен Rails работают в разработке, но не в производстве - PullRequest
5 голосов
/ 31 мая 2011

Я пытаюсь вложить некоторые маршруты в пространство имен, аккаунт.

Я хочу управление пользователями под учетной записью, как /account/users и /account/users/5/edit

В маршрутах .rb:

namespace :account do
  resources :users do
    member do
      put 'generate_api_key'
    end 

    collection do
      post 'api_key'
    end 
  end 
end 

Мои контроллеры не имеют пространства имен и не помещают их в какой-либо другой каталог.

/app
  /controllers
    accounts_controller.rb
    users_controller.rb

В моей среде разработки это работает нормально, но на производстве я получаю 404 ответа на любой из /account/users... путей (которые, кстати, все еще генерируются правильно: new_account_users_path, edit_account_user_path и т. Д.).

rake routes генерирует одинаковый выходной сигнал в обеих средах. Вот соответствующий бит:

 generate_api_key_account_user PUT    /account/users/:id/generate_api_key(.:format)                      {:action=>"generate_api_key", :controller=>"account/users"}
         api_key_account_users POST   /account/users/api_key(.:format)                                   {:action=>"api_key", :controller=>"account/users"}
                 account_users GET    /account/users(.:format)                                           {:action=>"index", :controller=>"account/users"}
                               POST   /account/users(.:format)                                           {:action=>"create", :controller=>"account/users"}
              new_account_user GET    /account/users/new(.:format)                                       {:action=>"new", :controller=>"account/users"}
             edit_account_user GET    /account/users/:id/edit(.:format)                                  {:action=>"edit", :controller=>"account/users"}
                  account_user GET    /account/users/:id(.:format)                                       {:action=>"show", :controller=>"account/users"}
                               PUT    /account/users/:id(.:format)                                       {:action=>"update", :controller=>"account/users"}
                               DELETE /account/users/:id(.:format)                                       {:action=>"destroy", :controller=>"account/users"}

Учитывая, что маршруты, кажется, ищут контроллер Users в подкаталоге /account, я предполагаю, что мой вопрос - почему это работает в разработке?

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

  • Рельсы 3.0.7
  • Пассажир
  • Apache

Разработка:

  • Рельсы 3.0.7
  • Барбос

Спасибо за ваши мысли по этому поводу.

1 Ответ

5 голосов
/ 31 мая 2011

Если вы используете такое пространство имен, Rails требует, чтобы контроллеры находились на своих правильных путях, таких как app/controllers/account/users_controller.rb.Если вы не хотите этого делать, используйте вместо этого scope:

scope :path => "account" do
  resources :users
end
...