rails4 部署注销所有用户

rails4 deployment logs out all users

一段时间以来出现了一些奇怪的行为。部署后(使用 capistarano)所有用户都需要重新登录!

出现在几个应用程序中,因为 Rails 4.x .. 这里有一些版本:

这真的很烦人,尤其是因为零停机部署不再有意义,记住我根本不起作用

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 并将其注入到一些监控脚本中。即:重新启动 sidekiqthin(因此它在 deploy.rb 中被硬编码)

感谢 surendar,他的 answer on capistrano 3 + rvm1-capistrano3 rails 4.1 secrets.yml environmental variables issue 是解决方案。

它似乎仍然不是最好的解决方案(但它有效),所以我会继续寻求更好的解决方案。