rails4 部署注销所有用户
rails4 deployment logs out all users
一段时间以来出现了一些奇怪的行为。部署后(使用 capistarano)所有用户都需要重新登录!
出现在几个应用程序中,因为 Rails 4.x .. 这里有一些版本:
- Rails: 4.2.5 / 4.2.6
- 设计:3.5.3 / 3.5.6 / 4.2.0
- Capistrano: 3.4.0
- Ruby: 2.2.1 / 2.3.0
- 网络服务器:nginx
- 应用程序服务器:瘦 (1.6.4 / 1.7.0)
这真的很烦人,尤其是因为零停机部署不再有意义,记住我根本不起作用
models/user
class User < ActiveRecord::Base
..
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable,
:validatable, :confirmable, :lockable, :timeoutable, :omniauthable, :invitable,
:omniauth_providers => CONFIG[:devise_provider]
..
end
initializers/devise
Devise.setup do |config|
config.secret_key = 'xxx-key-xxx'
config.mailer_sender = CONFIG[:mail_system]
config.mailer = 'AccountMailer'
require 'devise/orm/active_record'
config.case_insensitive_keys = [:email]
config.strip_whitespace_keys = [:email]
config.skip_session_storage = [:http_auth]
config.stretches = Rails.env.test? ? 1 : 10
config.invite_for = 0
config.reconfirmable = true
config.expire_all_remember_me_on_sign_out = true
config.password_length = CONFIG[:password_min_length]..CONFIG[:password_max_length]
config.timeout_in = 6.hours
config.reset_password_within = 6.hours
config.sign_out_via = :delete
config.omniauth :facebook, CONFIG[:facebook_id], CONFIG[:facebook_secret], {info_fields: 'email, first_name, last_name, gender', image_size: "large"}
config.omniauth :google_oauth2, CONFIG[:google_id], CONFIG[:google_secret], {
skip_jwt: true,
scope: "email, profile, plus.me",
# prompt: "select_account",
image_aspect_ratio: "square",
image_size: 200
}
end
大多数应用程序都在 运行 生产环境中,因此我在部署时不接触数据库(迁移除外)。
也发生在没有 devise_invitable 的应用程序中,所以这也不会导致它。
..感谢您的帮助! ..
也发布为 devise #4277
解决了!
问题是由我唯一没有提到的东西引起的:rvm
或更好的rvm1-capistrano3
,它完全忽略了~/.bachrc
、~/.profile
等等。
我不得不把 secret_key_base
放在 /etc/environment
中,现在它按预期工作了。
直到现在 secret_key_base
对我来说只是一个巨大的痛苦,因为所有记录在案的用法都不起作用,我不得不把 secret_key_base 放在 :default_env
并将其注入到一些监控脚本中。即:重新启动 sidekiq
或 thin
(因此它在 deploy.rb
中被硬编码)
感谢 surendar,他的 answer on capistrano 3 + rvm1-capistrano3 rails 4.1 secrets.yml environmental variables issue 是解决方案。
它似乎仍然不是最好的解决方案(但它有效),所以我会继续寻求更好的解决方案。
一段时间以来出现了一些奇怪的行为。部署后(使用 capistarano)所有用户都需要重新登录!
出现在几个应用程序中,因为 Rails 4.x .. 这里有一些版本:
- Rails: 4.2.5 / 4.2.6
- 设计:3.5.3 / 3.5.6 / 4.2.0
- Capistrano: 3.4.0
- Ruby: 2.2.1 / 2.3.0
- 网络服务器:nginx
- 应用程序服务器:瘦 (1.6.4 / 1.7.0)
这真的很烦人,尤其是因为零停机部署不再有意义,记住我根本不起作用
models/user
class User < ActiveRecord::Base
..
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable,
:validatable, :confirmable, :lockable, :timeoutable, :omniauthable, :invitable,
:omniauth_providers => CONFIG[:devise_provider]
..
end
initializers/devise
Devise.setup do |config|
config.secret_key = 'xxx-key-xxx'
config.mailer_sender = CONFIG[:mail_system]
config.mailer = 'AccountMailer'
require 'devise/orm/active_record'
config.case_insensitive_keys = [:email]
config.strip_whitespace_keys = [:email]
config.skip_session_storage = [:http_auth]
config.stretches = Rails.env.test? ? 1 : 10
config.invite_for = 0
config.reconfirmable = true
config.expire_all_remember_me_on_sign_out = true
config.password_length = CONFIG[:password_min_length]..CONFIG[:password_max_length]
config.timeout_in = 6.hours
config.reset_password_within = 6.hours
config.sign_out_via = :delete
config.omniauth :facebook, CONFIG[:facebook_id], CONFIG[:facebook_secret], {info_fields: 'email, first_name, last_name, gender', image_size: "large"}
config.omniauth :google_oauth2, CONFIG[:google_id], CONFIG[:google_secret], {
skip_jwt: true,
scope: "email, profile, plus.me",
# prompt: "select_account",
image_aspect_ratio: "square",
image_size: 200
}
end
大多数应用程序都在 运行 生产环境中,因此我在部署时不接触数据库(迁移除外)。 也发生在没有 devise_invitable 的应用程序中,所以这也不会导致它。
..感谢您的帮助! ..
也发布为 devise #4277
解决了!
问题是由我唯一没有提到的东西引起的:rvm
或更好的rvm1-capistrano3
,它完全忽略了~/.bachrc
、~/.profile
等等。
我不得不把 secret_key_base
放在 /etc/environment
中,现在它按预期工作了。
直到现在 secret_key_base
对我来说只是一个巨大的痛苦,因为所有记录在案的用法都不起作用,我不得不把 secret_key_base 放在 :default_env
并将其注入到一些监控脚本中。即:重新启动 sidekiq
或 thin
(因此它在 deploy.rb
中被硬编码)
感谢 surendar,他的 answer on capistrano 3 + rvm1-capistrano3 rails 4.1 secrets.yml environmental variables issue 是解决方案。
它似乎仍然不是最好的解决方案(但它有效),所以我会继续寻求更好的解决方案。