rails4部署注销所有用户

时间:2016-09-02 23:59:29

标签: ruby-on-rails-4 nginx devise thin capistrano3

很长一段时间以来,有一些奇怪的行为。部署后(使用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
  • App-Server:(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

1 个答案:

答案 0 :(得分:1)

解决了它!

问题是由我唯一没有提到的问题引起的:rvm或更好rvm1-capistrano3完全忽略了~/.bachrc~/.profile等等。

我必须将secret_key_base放入/etc/environment,现在它按预期工作。

直到现在secret_key_base对我来说只是一个巨大的痛苦,因为所有记录的用法都没有用,我必须将secret_key_base放在:default_env中并注入它在一些monit脚本中。即:重新启动sidekiqthin(因此它在deploy.rb中被硬编码)

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

它似乎仍然不是最好的解决方案(但它有效),所以我会保持开放以获得更好的解决方案。