【问题标题】:Rails5 app loses session after capistrano deploy to Passenger / Apache env, works fine on Rails 4在 capistrano 部署到Passenger / Apache env 后,Rails5 应用程序丢失会话,在 Rails 4 上运行良好
【发布时间】:2020-04-21 04:58:14
【问题描述】:

我管理着十几个使用 Capistrano 和 Passenger 的 Rails 应用程序。

我注意到,当我将更新部署到 Rails 5 应用程序时,用户会退出,即会话丢失。使用 Rails 4 或更早版本的应用程序不会,用户保持登录状态;会话处理在所有情况下都是所有 cookie(默认值)。

这与 Rails 或 Passenger 的不同版本有关吗?任何想法如何解决它?

这是 deploy.rb 片段:

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :mkdir, '-p', "#{release_path}/tmp"
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing, :restart
end

我正在使用

  * capistrano (3.13.0)
  * capistrano-bundler (1.6.0)
  * capistrano-rails (1.1.8)
  * capistrano-rails-console (2.3.0)
  * capistrano-rvm (0.1.2)

部署:cap production deploy

提前感谢您的帮助。 帕特里克

【问题讨论】:

  • 当你部署一个带有 cap 的 rails5 应用程序时,你到底做了什么(例如,完成了哪些任务,尤其是如果你有自定义任务)?可能有一些东西会覆盖用于检查 cookie 完整性的密钥。
  • 感谢您的回复@pduersteler - 我已经包含了上面的 deploy.rb sn-p - 你如何设置用于检查 cookie 完整性的密钥?

标签: ruby-on-rails apache capistrano passenger rvm-capistrano


【解决方案1】:

我认为我的问题是由于 Rails 5.2 的变化,引入了 master.keycredentials.yml.enc 以取代 secrets.yml

因为我创建的 Rails 5 应用使用的是 5.2,所以生成器不再创建 secrets.yml 文件 - 而且 master.key 设置也没有启用:

  # config.require_master_key = true

我假设 Rails 使用了一些临时密钥来签署 cookie - 每当服务器重新启动时都会更改。

我现在已将config/secrets.yml 重新添加到我的项目中,从我的测试来看,问题似乎已经消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多