Среда => Общий => Недавние файлы
24 объекта, показанные в объектах Меню окна
24, показанных в недавно используемых списках
Среда => Общий
Выставочная строка состояния НА
Анимационные инструменты среды ПРОЧЬ
Я видел это и обнаружил, что это очень сложно отлаживать.
Если вы используете пассажира, вы можете использовать консервативный метод создания новых серверов.
] В методе по умолчанию серверы используют один сокет для memcache.
В документации это обсуждается более подробно. http://www.modrails.com/documentation/Users%20guide%20Apache.html#_example_1_memcached_connection_sharing_harmful
Это может быть проблема с переключением cookie сеанса между двумя значениями. Например, один из них может быть назначен example.com, а другой - www.example.com. Это обычная ситуация, когда некоторые сайты отвечают на оба без перенаправления, чтобы сделать один каноническим.
Поведение некоторых браузеров заключается в отправке cookie соответствует самому длинному поддомену, тогда как другие фактически отправляют оба значения, и они могут отличаться. Это может привести к переключению сеанса между двумя разными значениями в непредсказуемое время.
Один из способов исправить это - заблокировать файлы cookie на .domain.com вместо того, чтобы позволить ему принимать версию без www или без www, если это case, или перенаправление для принудительного использования только одного.
Другой способ диагностировать природу ситуации сеанса - иметь страницу отладки, которая отображает идентификатор сеанса, или как-то встроить его в вывод страницы, чтобы тот, кто столкнулся с проблемой, помог в ее диагностике. Что-то вроде / session_info создать легко.
Я никогда раньше не сталкивался с такой проблемой, просто не могу представить, что это вообще происходит. Это мое подтверждение:
require 'memcache'
memcache_options = {
:c_threshold => 10_000,
:compression => true,
:debug => false,
:namespace => "app-me",
:readonly => false,
:urlencode => false
}
memcache_servers = [ "#{MEMCACHED_HOST}:#{MEMCACHED_PORT}" ]
CACHE = MemCache.new memcache_options
CACHE.servers = memcache_servers
ActionController::Base.session_options[:expires] = 1800
ActionController::Base.session_options[:cache] = CACHE
# Inside the Rails initializer
config.action_controller.session_store = :mem_cache_store
Вот код, который решает проблему для меня:
Я добавил эти строки в конец
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
CACHE.reset
if Rails.cache.class == ActiveSupport::Cache::MemCacheStore
Rails.cache.instance_variable_get(:@data).reset
end
end
end
end