Почему Authorization.current_user возвращает объект User на одном компьютере, а не на другом в Rails 3? - PullRequest
0 голосов
/ 19 июня 2011

У меня есть две машины, на которых запущено приложение rails. Линукс машина и MAC OS X.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я создаю нового пользователя в своем приложении, метод Devise confirmable отлично работает на одной машине, но не на другой.

Это ошибка в машине с Linux:

Started GET "/users/login" for 72.252.205.36 at Sat Jun 18 18:00:35 -0500 2011
 Processing by Devise::SessionsController#new as HTML
nil
Rendered devise/shared/_links.erb (1.9ms)
Rendered devise/sessions/new.html.erb within layouts/application (10.8ms)
Completed 200 OK in 90ms (Views: 18.3ms | ActiveRecord: 1.8ms)


Started GET "/users/confirmation?confirmation_token=12O-F_JMzI-SxpIEEEAh" for 72.252.205.36 at Sat Jun 18 18:02:04 -0500 2011
 Processing by Devise::ConfirmationsController#show as HTML
 Parameters: {"confirmation_token"=>"12O-F_JMzI-SxpIEEEAh"}
nil
 User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = '12O-F_JMzI-SxpIEEEAh' LIMIT 1
 Slug Load (0.2ms)  SELECT "slugs".* FROM "slugs" WHERE ("slugs".sluggable_id = 3 AND "slugs".sluggable_type = 'User') ORDER BY id DESC LIMIT 1
 AREL (0.2ms)  UPDATE "users" SET "updated_at" = '2011-06-18 23:02:04.980588', "confirmed_at" = '2011-06-18 23:02:04.977060', "confirmation_token" = NULL WHERE "users"."id" = 3
 AREL (0.3ms)  UPDATE "users" SET "current_sign_in_ip" = '72.252.205.36', "last_sign_in_ip" = '72.252.205.36', "updated_at" = '2011-06-18 23:02:04.986283', "sign_in_count" = 1, "current_sign_in_at" = '2011-06-18 23:02:04.984989', "last_sign_in_at" = '2011-06-18 23:02:04.984989' WHERE "users"."id" = 3
Completed 500 Internal Server Error in 88ms

NoMethodError (undefined method `update_space' for #<Authorization::AnonymousUser:0xb611f240 @role_symbols=[:guest]>):
 app/controllers/application_controller.rb:27:in `after_sign_in_path_for'

Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.6ms)
Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (11.6ms)
Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (17.9ms)

Но на OS X это то, что происходит с тем же действием:

Started GET "/users/login" for 127.0.0.1 at 2011-06-18 18:02:49 -0500
  Processing by Devise::SessionsController#new as HTML
nil
Rendered devise/shared/_links.erb (2.1ms)
Rendered devise/sessions/new.html.erb within layouts/application (38.2ms)
Completed 200 OK in 159ms (Views: 87.9ms | ActiveRecord: 269.9ms)


Started GET "/users/confirmation?confirmation_token=35eDT14LmVL5eusrsIRH" for 127.0.0.1 at 2011-06-18 18:03:12 -0500
  Processing by Devise::ConfirmationsController#show as HTML
  Parameters: {"confirmation_token"=>"35eDT14LmVL5eusrsIRH"}
nil
  User Load (2.2ms)  SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = '35eDT14LmVL5eusrsIRH' LIMIT 1
  Slug Load (0.5ms)  SELECT "slugs".* FROM "slugs" WHERE ("slugs".sluggable_id = 29 AND "slugs".sluggable_type = 'User') ORDER BY id DESC LIMIT 1
  AREL (0.4ms)  UPDATE "users" SET "confirmation_token" = NULL, "confirmed_at" = '2011-06-18 23:03:12.450907', "updated_at" = '2011-06-18 23:03:12.456550' WHERE "users"."id" = 29
  AREL (0.4ms)  UPDATE "users" SET "last_sign_in_at" = '2011-06-18 23:03:12.461899', "current_sign_in_at" = '2011-06-18 23:03:12.461899', "last_sign_in_ip" = '127.0.0.1', "current_sign_in_ip" = '127.0.0.1', "sign_in_count" = 1, "updated_at" = '2011-06-18 23:03:12.462653' WHERE "users"."id" = 29
Redirected to http://localhost:3000/home/index
Completed 302 Found in 118ms

Вот соответствующие фрагменты кода.

Из Application_Controller.rb

def after_sign_in_path_for(resource)
        Authorization.current_user.update_space
            if resource.is_a?(User) && resource.has_trial_expired?
                return url_for(:settings)
            end
        super       
    end

Из User.rb:

def update_space
       total_size = 0
         if self.uploads.count > 0
           self.uploads.each do |upload|
             total_size += upload[:image_file_size]
           end
         end
            self.space_used = total_size
                self.save
  end

Итак, у меня два вопроса:

  1. Почему он это делает?
  2. Как мне это исправить?

Спасибо.

Обновлено: теперь я получаю эту ошибку при работе на Heroku .... кроме того, как выглядит эта ошибка:

2011-07-01T21:24:22+00:00 app[web.1]: NoMethodError (undefined method `update_space' for #<Authorization::AnonymousUser:0x7f2d783cdcd0>):
2011-07-01T21:24:22+00:00 app[web.1]:   app/controllers/application_controller.rb:27:in `after_sign_in_path_for'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...