rails代码部署后报错信息ActiveSupport::MessageEncryptor::InvalidMessage

27 阅读1分钟

用docker把代码部署到云服务器,访问不了api,首先排查了一下docker是否正常运行

:~$  docker ps -a

CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS                      PORTS      NAMES
75e2c74b14cc   mangosteen:20230929-231217   "/bin/sh -c 'bundle …"   13 minutes ago   Exited (1) 13 minutes ago              mangosteen-prod-1
3e8a253354ab   postgres:14                  "docker-entrypoint.s…"   11 hours ago     Up 10 hours                 5432/tcp   db-for-mangosteen
cbeb737cab6d   hello-world                  "/hello"                 3 days ago       Exited (0) 3 days ago                  inspiring_meninsky
0065c80e4e9c   hello-world                  "/hello"                 3 days ago       Exited (0) 3 days ago                  friendly_elion

mangosteen-prod-1不能正常运行的,那就查看一下这个docker死之前发生了什么事情

:~$  docker logs 75e2c74b14cc

image.png

百度找到解决方法:Rails:ActiveSupport :: MessageEncryptor :: InvalidMessage | 码农家园 (codenong.com)

重新创建密钥 之前没有创建过 config/master.key 和 config/credentials.yml.enc 两个文件

//在当前项目的文件夹命令输入以下两个命令
:~$ rm config/credentials.yml.enc

//这个命令会用vscode打开文件夹
:~$ EDITOR="code --wait" bin/rails credentials:edit

打开的文件夹内容应该是这样,没有的话就自己输入

secret_key_base: xxx
email_password: xxx
hmac_secret: xxx

可以新开一个终端,通过这个命令 bin/rake secret获取随机数 把生成的三个随机数替换掉上面的xxx

然后回到最初开始的项目文件夹终端,输入以下命令

bin/rails credentials:edit --environment production

然后就可以了