По какой-то причине префикс домена с точкой не работал (rails 3.2.11) для меня тоже.Для исправления потребовался кусок пользовательского Middleware.Краткое описание этого решения приведено ниже.
tl; dr: Вам необходимо написать специальное промежуточное программное обеспечение для стойки.Вы должны добавить его в свой conifg/environments/[production|development].rb
.Это на Rails 3.2.11
Сеансы cookie обычно хранятся только для вашего домена верхнего уровня.
Если вы заглянете в Chrome -> Settings -> Show advanced settings… -> Privacy/Content settings… -> All cookies and site data… -> Search {yourdomain.com}
Вы можете увидеть, что для * 1011 будут отдельные записи* и othersub.yourdomain.com
и yourdomain.com
Задача состоит в том, чтобы использовать один и тот же файл хранилища сеансов во всех поддоменах.
Шаг 1. Добавить пользовательский класс промежуточного программного обеспечения
Этогде Rack Middleware входит. Некоторые соответствующие ресурсы стойки и рельсов:
Вот пользовательский класс, который вы должны добавить в lib
Это было написано @ Nader , и вы все должны поблагодарить его
# Custom Domain Cookie
#
# Set the cookie domain to the custom domain if it's present
class CustomDomainCookie
def initialize(app, default_domain)
@app = app
@default_domain = default_domain
end
def call(env)
host = env["HTTP_HOST"].split(':').first
env["rack.session.options"][:domain] = custom_domain?(host) ? ".#{host}" : "#{@default_domain}"
@app.call(env)
end
def custom_domain?(host)
host !~ /#{@default_domain.sub(/^\./, '')}/i
end
end
По сути, это то, что он отобразит все ваши данные сеанса cookieобратно в тот же файл cookie, который равен вашему корневому домену.
Шаг 2:Add To Rails Config
Теперь, когда у вас есть собственный класс в lib, убедитесь, что он загружается автоматически.Если это ничего не значит для вас, посмотрите здесь: Автозагрузка Rails 3
Прежде всего, убедитесь, что вы используете систему cookie-файлов для всей системы.В config/application.rb
мы говорим Rails использовать хранилище cookie.
# We use a cookie_store for session data
config.session_store :cookie_store,
:key => '_yourappsession',
:domain => :all
Причина, по которой это здесь упоминается, заключается в строке :domain => :all
.Есть другие люди, которые предложили указать :domain => ".yourdomain.com"
вместо :domain => :all
.По какой-то причине это не сработало для меня, и мне понадобился пользовательский класс Middleware, как описано выше.
Затем в вашем config/environments/production.rb
добавьте:
config.middleware.use "CustomDomainCookie", ".yourdomain.com"
Примечаниечто предшествующая точка необходима.См. " cookie субдомена, отправленные в запросе родительского домена? ", чтобы узнать почему.
Затем в вашем config/environments/development.rb
добавьте:
config.middleware.use "CustomDomainCookie", ".lvh.me"
Трюк lvh.me отображается на localhost.Это крутоСм. этот Railscast о поддоменах и в этой заметке для получения дополнительной информации.
Надеюсь, что это должно сделать.Я, честно говоря, не совсем уверен, почему этот процесс настолько запутанный, так как я считаю, что сайты с поддоменами являются общими.Если у кого-либо есть какие-либо дополнительные сведения о причинах каждого из этих шагов, просим сообщить нам об этом в комментариях.