모델의 세션에 액세스하는 데 사용하고 있습니다. Apache Passenger 배포시 확인 : 모델의 레일스 액세스 세션
http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/
는 사람이 너무 아파치 + 여객 배포 작동하는지 확인할 수 있습니까?아니면 다른 대안이 있다면?
감사합니다,
이므 란
모델의 세션에 액세스하는 데 사용하고 있습니다. Apache Passenger 배포시 확인 : 모델의 레일스 액세스 세션
http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/
는 사람이 너무 아파치 + 여객 배포 작동하는지 확인할 수 있습니까?아니면 다른 대안이 있다면?
감사합니다,
이므 란
예. 이것은 모델에서 세션 데이터를 사용하는 유일한 방법입니다. 나는 또한 그것을 사용했고 Apache + 승객과 관련된 배포 문제에 직면하지도 않았습니다.
하지만 세션 값으로 언제 재생하는지 확인해야합니다. 서버에 대한 각각의 새로운 요청에서 세션 값은 스레드에 저장되고 모델에서 액세스 할 수 있습니다. 스레드 값을 사용하여 논리를 적용하는 경우 스레드 값이 0이 아닌 상황에서도 확인하십시오.
개발시 문제가 발생하기 때문에 모든 코드가 정상적으로 작동하지만 서버를 시작하는 동안 처음에는 스레드 값이 0으로 간주되므로 문제가 발생했습니다.
나는 인터넷에서 작동하는 코드를 찾지 못했기 때문에 약간의 연구를했고 자신의 글을 썼다. Rails 3.2.x와 다른 버전에서도 작동합니다. 당신의 ApplicationController
# Set a filter that is invoked on every request
before_filter :_set_current_session
protected
def _set_current_session
# Define an accessor. The session is always in the current controller
# instance in @_request.session. So we need a way to access this in
# our model
accessor = instance_variable_get(:@_request)
# This defines a method session in ActiveRecord::Base. If your model
# inherits from another Base Class (when using MongoMapper or similar),
# insert the class here.
ActiveRecord::Base.send(:define_method, "session", proc {accessor.session})
end
에서
삽입이 나는 모델에서 세션에 액세스하는 나쁜 코드로 이어질 수 있음을 알려하지 않습니다. Other posts may tell you, that you are stupid. Model.save
메소드를 구현하는 것과 같이 모델에서 세션에 액세스하는 유효한 이유가 있지만 현재 사용자 세션에 저장됩니다.
좋은 기술입니다. 고맙습니다! – Saim
그리고 Rspec을 사용하여 올바르게 테스트 할 수 있습니까? 지금이 모델을 사용하고있는 모든 테스트에서'정의되지 않은 지역 변수 또는 메소드 세션 '이 나온다고 –
좋은 해결책 감사합니다. –
감사합니다. Nimsesh. 1. ActiveRecord Observer에서 모든 레코드에 대해 세션에서 값을 사용하여 필드를 업데이트합니다. 2. current_user (restful_authentication) 필드를 설정합니다. 모든 사용자가 로그인 할 때 설정되는 다른 값을 보유합니까? – Saim
예. 여기를 다시 보시오 http : //www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/ ... 그것은'before_filter : set_user '를 호출하면 스레드에 대한 각각의 새 요청에 대한 세션 값이 저장됩니다. 즉, 모든 사용자가 서로 다른 값을 가지고 있음을 의미합니다. 모든 사람의 요청이 다르므로 스레드가 다른 값으로 업데이트를 계속합니다. –