나는 다음과 같은 오류를 받고 있어요 내 배치 레일 2.3.5 응용 프로그램 (전무에 대한 정의되지 않은 메서드`to_sym 'NilClass) :레일 : 정의되지 않은 방법 'to_sym'
NoMethodError
내 현지 테스트 Sqlite를 사용하는 응용 프로그램을 설치하면 오류가 발생하지 않지만 MySQL을 실행하는 배포 된 응용 프로그램에서는 오류가 발생합니다. 이 둘의 유일한 차이점은 로컬 컴퓨터에서 Ruby 1.8.7을 실행하고 배포 서버에서 1.8.6을 실행하고 있다는 것입니다.
아래에 User.rb의 코드와 오류 로그가 포함되었습니다. 필자는 Declarative Authorization과 Embedded Authorization Railscasts를 따라 이것을 설정했습니다.
도움이 될 것입니다.
편집 : 여기에 내가 before_filter 사용 CURRENT_USER를 설정 application_controller에 대한 코드입니다 :
class ApplicationController < ActionController::Base
helper :all
helper_method :current_user_session, :current_user
before_filter :set_current_user
protected
def set_current_user
Authorization.current_user = current_user
end
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
@current_user = current_user_session && current_user_session.record
end
end
-
User.rb :
class User < ActiveRecord::Base
acts_as_authentic
has_many :products
has_many :transactions
ROLES = %w[admin dmstaff staff faculty]
def role_symbols
[role.to_sym]
end
end
오류 로그 :
은NoMethodError (undefined method `to_sym' for nil:NilClass):
app/models/user.rb:10:in `role_symbols'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization 0.4/lib/declarative_authorization/authorization.rb:242:in `roles_for'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/authorization.rb:296:in `user_roles_privleges_from_options'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/authorization.rb:161:in `permit!'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:580:in `permit!'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `filter_access_filter'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `each'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `all?'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `filter_access_filter'
passenger (2.2.5) lib/phusion_passenger/rack/request_handler.rb:95:in `process_request'
passenger (2.2.5) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:378:in `start_request_handler'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:336:in `handle_spawn_application'
passenger (2.2.5) lib/phusion_passenger/utils.rb:183:in `safe_fork'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:334:in `handle_spawn_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:163:in `start'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:213:in `start'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:262:in `spawn_rails_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:256:in `spawn_rails_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize'
passenger (2.2.5) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:255:in `spawn_rails_application'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:154:in `spawn_application'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:287:in `handle_spawn_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
Rendering /var/data/app/current/public/500.html (500 Internal Server Error)
사용자 역할은 사용자 테이블에 정의되어 있으며 사용자 작성시 지정됩니다. 역할을 선택하는 새 사용자 양식의 줄은 다음과 같습니다. <% = f.collection_select : role, User :: ROLES, : to_s, : humanize %> –
아, 그랬습니다. 테스트 데이터베이스에는 이미 정의 된 역할이 있지만 프로덕션 데이터베이스에는 그렇지 않습니다. 어떤 오류가 발생했는지. 기존 사용자의 역할을 정의했으며 모든 것이 세계와 맞습니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! –
* role *이 nil 인 경우 빈 배열을 반환하는 구조 코드를 추가하는 것이 더 안전합니다. – nanda