Подтвердите развертывание Apache Passenger: сеанс доступа к рельсам в модели - PullRequest
8 голосов
/ 25 ноября 2010

Я использую это для доступа к сеансу в модели.

http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/

Кто-нибудь может подтвердить, что он также будет работать с развертыванием Apache + Passenger?

Или, если есть какие-либо другие альтернативы для достижения того же?

Спасибо,

Имран

Ответы [ 2 ]

25 голосов
/ 06 апреля 2012

Я не нашел ни одного кода в интернете, который бы работал, поэтому я провел небольшое исследование и написал свой собственный.Это работает для 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

Я не буду напоминать вам, что доступ к вашей сессии из модели может привестина плохой код. Другие посты могут сказать вам, что вы глупы .Хотя есть некоторые веские причины для доступа к сеансу из вашей модели, например, для реализации метода Model.save, который сохраняет текущий сеанс пользователя.

2 голосов
/ 25 ноября 2010

Да.Это единственный эффективный способ использования данных сеанса в модели.Я также использовал его и никогда не сталкивался с какими-либо проблемами развертывания с Apache + passenger.

Но вам необходимо подтвердить, когда вы будете играть со значениями сеанса.При каждом новом запросе к серверу значение сеанса сохраняется в потоке, и мы можем получить к нему доступ в модели.Если вы применяете какую-либо логику, используя значение потока, то также убедитесь, что в ситуации, когда значение потока может быть равно нулю.

Поскольку у меня возникла проблема, связанная с разработкой, каждый мой код работал нормально, но в процессе работы, во времяпри запуске сервера возникла проблема, так как изначально он рассматривал значение потока как nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...