Devise user_root_path получает 404-й в производство, но не dev? - PullRequest
4 голосов
/ 20 января 2011

странно, я знаю, но использование user_root_path в производстве не работает. Когда я нажимаю на ссылку myapp.com/user, я получаю страницу 404.

В файле журнала не отображается плевок, но неудачная попытка:

Started GET "/user" for 123.125.146.23 at 2011-01-19 19:40:45 +0000

ActionController::RoutingError (uninitialized constant User::UsersController):

Теперь единственный способ увидеть что-то об этой унифицированной константе - это включить rails c и ввести константу в консоль. Вот что происходит:

ruby-1.9.2-p136 :005 > User::UsersController
(irb):5: warning: toplevel constant UsersController referenced by User::UsersController
=> UsersController 

Теперь некоторые раскопки обнаружили, что это предупреждение верхнего уровня может быть им мешало. Но на бревне написано Бубкисс.

Итак, я изменил файл маршрута с:

  devise_for :users
namespace :user do
  root :to => "users#index"
end
resources :subdomains
match '/user' => 'users#index'

до:

devise_for :users
namespace :user do
  root :to => "subdomains#index"
end
resources :subdomains
match '/user' => 'users#index', :controller => :users

Мысль была о том, что, возможно, производственной среде не понравился индекс # пользователя ... поэтому я изменил его на поддомен # индекс. Я могу получить / поддоменов нет проблем. Таким образом, фактическая страница покажет, это маршрут, который вымышлен ... какие-нибудь мысли?

установка: рельсы 3.0.3, разработка 1.1.5 (и была обновлена ​​1.1.3, та же проблема)

Ответы [ 3 ]

2 голосов
/ 22 января 2011

Я использовал

devise_for :users do
   match 'user' => "users#index", :as => :user_root, :constraints => { :domain => SITE_DOMAIN}
end

В каждом из ваших файлов development.rb или production.rb у вас будет константа SITE_DOMAIN, например:

::SITE_DOMAIN = "lvh.me" 
#in development.rb I was using subdomains with the helpful lvh.me google it.

или в production.rb

::SITE_DOMAIN = "mydomain.com"

Опять мне нужны были субдомены, так что это сработало для меня.

Разработанная вики не работала для меня.Как только у меня будет время, я тоже обновлю его или отправлю тикет, но для тех, кому это нужно, это всего лишь гугл сок.

0 голосов
/ 09 мая 2011

У меня была такая же проблема с / user, которая выдала 404 на производстве.Вот решение, которое я выбрал, и которое мне кажется проще, чем возиться с маршрутами.В ApplicationController положить:

def after_sign_in_path_for(resource)
  stored_location_for(:user) || landing_welcome_path
end

Может кто-нибудь объяснить, как среда влияет на маршрутизацию в рельсах 3?

0 голосов
/ 20 января 2011

Если вы используете пространство имен для ваших маршрутов, вам также необходимо указать пространство имен для ваших контроллеров.

Переместить controllers / users_controller.rb в controllers / user / users_controller.rb и отредактировать его, добавив в модуль:

class User::UsersController < ApplicationController
end

Но я думаю, вы на самом деле не хотите использовать пространство имен в маршруте.

...