ruby-on-rails - 설치 - what is ruby on rails




Devise Helpers(authenticate_user!, current_user, user_signed_in?)가 초기화되지 않았습니다. (4)

나는 고안을 설정하고 고의적 인 도우미를 사용할 수 있어야합니다. before_filter :authenticate_user! 추가 할 때 before_filter :authenticate_user! 응용 프로그램 컨트롤러에 다음 오류가 undefined method 'authenticate_user!' for #<HomeController:*> undefined method 'authenticate_user!' for #<HomeController:*>

내 홈 컨트롤러에 직접 존재하지 않지만 skip_before_filter :authenticate_user! 사용하면 응용 프로그램 컨트롤러에서 상속됩니다 skip_before_filter :authenticate_user! 내 고향 (또는 다른 컨트롤러)에서 페이지에 액세스하려고하면 다음 오류가 발생합니다.

undefined method `user_signed_in?' for #<#<Class *>

이 파일은 layouts / application.html.erb 파일에서 해당 행을 구분합니다. 어떤 일들도 똑같은 일이 일어난다. 그러나 레일즈 콘솔을로드하고 $LOAD_PATH.dup 입력하면 출력이 포함 된 $LOAD_PATH.dup 전혀로드되지 않는 것처럼 보입니다.

 "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/lib", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/controllers", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/helpers", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/mailers" 

그래서 그들은 정말로 레일로 짐을 져야하는 것 같습니다.

이것은 내 응용 프로그램 컨트롤러입니다.

class ApplicationController <ActionController :: Base

도우미 : 모든 # 모든 도우미 포함, 항상
protect_from_forgery
ActionView :: Helpers :: NumberHelper를 포함하십시오.
before_filter : authenticate_user!

종료

내가 devise를 설치 한 후 서버를 다시 시작했는데 여러 번 시도해 보니 문제를 해결하려고 시도했습니다. 파일이나 정보가 더 필요하면 알려주십시오. 대단히 감사드립니다.

편집 : 내 user.rb 파일은 내가 실제로 장치를 설치했음을 보여 주도록 요청되었습니다.

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :encryptable, :encryptor => :restful_authentication_sha1  

  # Setup accessible (or protected) attributes for your model  
  attr_accessible :email, :password, :password_confirmation, :remember_me  

end

편집 : 전체 오류 메시지

NoMethodError in HomeController # index

정의되지 않은 메소드`authenticate_user! ' # <HomeController : 0x000000040c45a0>에 대한

전체 추적 결과는 다음과 같습니다.

activesupport (3.2.13) lib / active_support / callbacks.rb : 418 : 실행 중 _2094683035699451847__process_action_ 2229546931289158113 _callbacks '

activesupport (3.2.13) lib / active_support / callbacks.rb : 405 :`__run_callback '에 있음

activesupport (3.2.13) lib / active_support / callbacks.rb : 385 : in>`_run_process_action_callbacks '

activesupport (3.2.13) lib / active_support / callbacks.rb : 81 :`run_callbacks '에서

액션 팩 (3.2.13) lib / abstract_controller / callbacks.rb : 17 :`process_action '

액션 팩 (3.2.13) lib / action_controller / metal / rescue.rb : 29 :`process_action '

액션 팩 (3.2.13) lib / action_controller / metal / instrumentation.rb : 30 :`block in process_action '

activesupport (3.2.13) lib / active_support / notifications.rb : 123 :`block in instrument '

activesupport (3.2.13) lib / active_support / notifications / instrumenter.rb : 20 :`악기 '

activesupport (3.2.13) lib / active_support / notifications.rb : 123 :`악기 '

액션 팩 (3.2.13) lib / action_controller / metal / instrumentation.rb : 29 :`process_action '

액션 팩 (3.2.13) lib / action_controller / metal / params_wrapper.rb : 207 :`process_action '

액션 팩 (3.2.13) lib / abstract_controller / base.rb : 121 :`프로세스 '

액션 팩 (3.2.13) lib / abstract_controller / rendering.rb : 45 :`프로세스 '

액션 팩 (3.2.13) lib / action_controller / metal.rb : 203 :`디스패치 '

액션 팩 (3.2.13) lib / action_controller / metal / rack_delegation.rb : 14 :`디스패치 '

액션 팩 (3.2.13) lib / action_controller / metal.rb : 246 :`행동중인 블록 '

액션 팩 (3.2.13) lib / action_dispatch / routing / route_set.rb : 73 :`call '

액션 팩 (3.2.13) lib / action_dispatch / routing / route_set.rb : 73 :`디스패치 '

액션 팩 (3.2.13) lib / action_dispatch / routing / route_set.rb : 36 :`call '

여행 (1.0.4) lib / journey / router.rb : 68 :`통화 중 차단 '

여행 (1.0.4) lib / journey / router.rb : 56 :`each '

여행 (1.0.4) lib / journey / router.rb : 56 :`call '

액션 팩 (3.2.13) lib / action_dispatch / routing / route_set.rb : 612 :`call '

관리자 (1.2.1) lib / 관리자 / manager.rb : 35 :`블록 호출 '

관리자 (1.2.1) lib / 관리자 / manager.rb : 34 :`catch '

관리자 (1.2.1) lib / 관리자 / manager.rb : 34 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / best_standards_support.rb : 17 :`콜 '

rack (1.4.5) lib / rack / etag.rb : 23 :`call '

rack (1.4.5) lib / rack / conditionalget.rb : 25 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / head.rb : 14 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / params_parser.rb : 21 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / flash.rb : 242 :`호출 '

랙 (1.4.5) lib / 랙 / 세션 / 추상 / id.rb : 210 :`컨텍스트 '

랙 (1.4.5) lib / rack / session / abstract / id.rb : 205 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / cookies.rb : 341 :`call '

activerecord (3.2.13) lib / active_record / query_cache.rb : 64 :`호출 '

activerecord (3.2.13) lib / active_record / connection_adapters / abstract / connection_pool.rb : 479 :`호출 '

액션 팩 (3.2.13) lib / action_dispatch / middleware / callbacks.rb : 28 :`블록 호출 '

activesupport (3.2.13) lib / active_support / callbacks.rb : 405 : 실행 중 _177144612565476380_ call _4534346825225857812__callbacks '

activesupport (3.2.13) lib / active_support / callbacks.rb : 405 :`__run_callback '에 있음

activesupport (3.2.13) lib / active_support / callbacks.rb : 385 :`_run_call_callbacks '에 있음

activesupport (3.2.13) lib / active_support / callbacks.rb : 81 :`run_callbacks '에서

액션 팩 (3.2.13) lib / action_dispatch / middleware / callbacks.rb : 27 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / reloader.rb : 65 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / remote_ip.rb : 31 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / debug_exceptions.rb : 16 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / show_exceptions.rb : 56 :`call '

레일 티 (3.2.13) lib / rails / rack / logger.rb : 32 :`call_app '

railties (3.2.13) lib / rails / rack / logger.rb : 16 : '블록 콜'

activesupport (3.2.13) lib / active_support / tagged_logging.rb : 22 : '태그 된'

레일 티 (3.2.13) lib / rails / rack / logger.rb : 16 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / request_id.rb : 22 :`call '

rack (1.4.5) lib / rack / methodoverride.rb : 21 :`call '

rack (1.4.5) lib / rack / runtime.rb : 17 :`call '

activesupport (3.2.13) lib / active_support / cache / strategy / local_cache.rb : 72 :`호출 '

rack (1.4.5) lib / rack / lock.rb : 15 :`call '

액션 팩 (3.2.13) lib / action_dispatch / middleware / static.rb : 63 :`call '

레일 티 (3.2.13) lib / rails / engine.rb : 479 :`call '

레일 티 (3.2.13) lib / rails / application.rb : 223 :`call '

레일 티 (3.2.13) lib / rails / railtie / configurable.rb : 30 :`method_missing '에서

승객 (4.0.2) lib / phusion_passenger / rack / thread_handler_extension.rb : 77 :`process_request '에서

승객 (4.0.2) lib / phusion_passenger / request_handler / thread_handler.rb : 135 :`accept_and_process_next_request '

승객 (4.0.2) lib / phusion_passenger / request_handler / thread_handler.rb : 106 :`main_loop '

승객 (4.0.2) lib / phusion_passenger / request_handler.rb : 449 : '블록 (4 레벨) in start_threads'

승객 (4.0.2) lib / phusion_passenger / utils / robust_interruption.rb : 108 :`disable_interruptions '에

승객 (4.0.2) lib / phusion_passenger / request_handler.rb : 444 : '블록 (3 레벨) in start_threads'

편집 : 이것은 콘솔에서 Devise.helpers를 실행하는 텍스트입니다.

$ rails console

개발 환경로드 (Rails 3.2.13)

1.9.3-p429 : 001> Devise.helpers

=> # <세트 : {Devise :: Controllers :: Helpers}>

편집 :이 내 노선 rb 파일. : Application.routes.draw do

devise_for :users  

resource :sessions, :only => [:new, :create, :destroy]

devise_scope :user do
    match 'signup' => 'users#new', :as => :signup
    match 'register' => 'users#create', :as => :register
    match '/login' => 'sessions#new', :as => :login 
     match 'logout' => 'sessions#destroy', :as => :logout
end
match '/activate/:activation_code' => 'users#activate', :as => :activate, :activation_code => nil

match '/users/:id', :to => 'users#show', :as => :user

resources :users do

member do
     put :suspend
     put :unsuspend
     delete :purge
end

end

resource :sessions

   other resources

match '' => 'home#index', :as => :home
match ':controller(/:action(/:id))'
root to: 'home#index'
end 

Devise의 시작 가이드에 따라 동일한 문제가있었습니다.

rails generate model User rails generate devise User 보다는 실수로 rails generate model User 실행했다는 사실이 밝혀졌습니다. rails generate devise User 'User'라는 이름을 가진 일반 ActiveRecord 모델을 만든 rails generate devise User 를 생성합니다.


그냥 레일 서버를 다시 시작하십시오.

"이미 앱을 시작했다면 앱을 다시 시작해야하며 그렇지 않으면 사용자가 로그인 할 수없고 경로 도우미가 정의되지 않은 것과 같은 이상한 오류가 발생합니다." [시작하기 지침]

[편집] 더 자세한 답변 :

두 가지 추가 사항을 확인하십시오. HomeController는 Devise :: Controllers :: Helpers에서 상속해야합니다. 그리고 helper에서 missing 메서드를 생성하는 route.rb의 devise 지시문은 Devise. @ 매핑을 확장해야합니다. 다음 코드는 이것을 검사 할 수 있습니다 :

class ApplicationController ...
  ...
  before_filter do
    fail "bad ancestor" unless self.kind_of?(Devise::Controllers::Helpers)
    fail "no mapping" unless Devise.class_variable_get(:@@mappings).[:user]
    authenticate_user!
  end
end

작동중인 레일 애플리케이션에서 비슷한 문제를 일으키기 위해서는 config / initializers / devise.rb 및 config / routes.rb devise 항목을 비활성화하고 레일을 다시 시작해야합니다. 레일을 다시 시작하지 않으면 코드를 다시 활성화해도 문제가 해결되지 않습니다.


나에게이 트릭을 한 컨트롤러에이 라인을 추가했다.

include Devise::Controllers::Helpers

잘못 될 수있는 많은 것들이 있습니다. 순서대로 확인해야 할 사항 :

  • before_filter :authenticate_user! 를 호출 할 수 없습니다 before_filter :authenticate_user! 장치가 올바르게 설정되지 않았 음을 나타냅니다.
  • devise_for :users 추가 devise_for :users routes.rb에있는 devise_for :users ( devise_for :users 습니다), 다음으로 범위가 지정된 규칙을 단순화하여 테스트하십시오.
  • before_filter :authenticate_user! 가 있어야 before_filter :authenticate_user! 컨트롤러에서 헬퍼를 얻거나 헬퍼를 수동으로 포함시키기위한 작업
  • 기본 컨트롤러가 ActionController에서 상속받지 않으면 수동으로 도우미 메서드를 추가해야합니다. 기본 컨트롤러에 넣으십시오. helper_method "current_user", "user_signed_in?", "user_session"
  • 한 가지 확인해야 할 사항은 self.controller.current_user erb에서 작동합니까? 이것은 helper_method가 포함되지 않음을 나타냅니다.