执行bundle exec rake snorby:setup报rake aborted! invalid hash错误
Snorby部署执行
bundle exec rake snorby:setup报invalid hash错误排查 问题表现
在Ruby on Rails环境部署Snorby时,执行bundle exec rake snorby:setup命令后抛出rake aborted! invalid hash错误。
命令执行过程的输出依次为:
- Jammit Warning: Asset compression disabled -- Java unavailable.
- 提示snorby_config.yml配置文件未指定time_zone,自动检测到时区为Asia/Kolkata
- 输出哈希字符串:
750d6d911891ab576bdbc6b1c4dc5ecf73cb95fd145ab7b16194636094daa3b4ba42b01c05d991c8c174919162e00152a129c645b1e0508850042cf224f165af - mysql: [Warning] Using a password on the command line interface can be insecure.
- ERROR 1007 (HY000) at line 1: Can't create database 'snorby'; database exists
- [datamapper] Finished auto_upgrade! for :default repository 'snorby'
错误指向任务链路:Tasks: TOP => db:seed,提示可添加--trace参数运行命令查看完整错误栈。
运行环境信息
- Ruby版本:ruby 1.9.3p551 (2014-11-13 revision 48406) [x86_64-linux]
- Bundler版本:Bundler version 1.9.3
- 操作系统版本:Ubuntu 20.04 LTS (focal)
根因定位
该错误发生在种子数据写入阶段(db:seed),是密码哈希校验不匹配导致的,和前置的几个告警没有直接关系:
- Jammit的Java不可用告警仅会关闭静态资源压缩,不影响初始化流程
- 数据库已存在的1007错误是正常提示,说明库已提前创建,后续表结构自动升级流程可正常执行
- Mysql命令行传密码的警告是客户端安全提示,不影响SQL执行
- 核心问题是
snorby_config.yml中未配置password_key加密盐值,加上Ruby 1.9.3与Snorby依赖的旧版bcrypt库存在兼容问题,生成的管理员密码哈希格式不符合校验规则,触发invalid hash报错。另外配置文件未显式指定时区,也可能在哈希生成时引入时间相关的计算偏差。
修复步骤
- 清理残留数据:登录Mysql执行以下命令,删除之前初始化失败残留的管理员账号数据
DELETE FROM snorby.users WHERE user_name = 'snorby'; - 修改配置文件:打开项目根目录下
config/snorby_config.yml- 找到
time_zone配置项,显式设置为实际使用的时区,国内用户可设置为'Beijing' - 找到
password_key配置项,填入一个长度不小于32位的随机字符串作为加密盐,不要留空
- 找到
- 重置表结构:在项目根目录执行
bundle exec rake db:automigrate - 重新执行初始化命令
bundle exec rake snorby:setup
初始化完成后,使用默认账号snorby@snorby.org、密码snorby即可登录后台。如果后续需要启用静态资源压缩,执行sudo apt install openjdk-8-jre-headless安装Java运行环境即可消除Jammit告警。
内容的提问来源于stack exchange,提问作者LinOm
相关产品推荐
相关产品推荐

