ruby-on-rails - 在 capistrano 部署到Passenger / Apache env 后,Rails5 应用程序丢失会话,在 Rails 4 上运行良好
问题描述
我管理着十几个使用 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
在此先感谢您的帮助。帕特里克
解决方案
我认为我的问题是由于 Rails 5.2 的变化,引入master.key
和credentials.yml.enc
接管secrets.yml
因为我创建的 Rails 5 应用程序使用的是 5.2,所以生成器不再创建secrets.yml
文件 - 而且 master.key 设置也没有启用:
# config.require_master_key = true
我假设由于这个原因,Rails 使用了一些临时密钥来签署 cookie - 每当服务器重新启动时都会改变。
我现在已经重新添加 config/secrets.yml
到我的项目中,从我的测试来看,问题似乎已经消失了。
推荐阅读
- javascript - 在量角器中的规格之间共享测试用例
- mysql - mySQL 在同一张表中将 Child 合并到 Mater
- robotframework - 如何从机器人框架中的excel表中读取数据?
- mongodb - Apache Drill Mongo DB 简单查询耗时太长
- javascript - D3.js:获取所选下拉选项的文本?
- rest - 使用相同的 json 结构响应每个请求是否是个坏主意?
- windows - Cython 无法编译
- angularjs - 如何暂停代码直到 .then 函数在 AngularJS 中执行
- python - 在单元格中的第一个字母之后拆分熊猫数据框列(一分为二)
- sql - 导入数据层应用程序时出错