作为一名开发者,有许多密码用于各种服务,但有时也会因为各种原因忘记或输错密码。当意识到自己被锁在了自己的账户外,本以为这没什么大不了的,可以简单地发送一个"重置密码"的邮件然后继续。这通常是可行的,除非忘记了配置Ghost的邮件服务来实现这一点。
所以被困在了这里,被锁在了自己的博客外面,无法重置密码。想,为什么不趁这个机会升级Ghost到最新版本,并尝试通过数据库解锁自己呢?
如果还没有在Azure上使用过Ghost,开始使用它非常简单。Felix Rieseberg实际上有一个名为Ghost-Azure的GitHub项目,它基本上是一键部署到云的方法:
如果通过这种方式部署到Azure,会发现通过Azure门户的同步按钮可以完全管理Ghost部署的同步:
点击同步将针对当前的Ghost-Azure仓库,并为处理升级过程。非常简单,对吧?但如果这不起作用呢?
显然,对于大多数人来说,之前的同步方法效果很好。但遗憾的是,不属于这个独家俱乐部。在重启Web服务器并尝试访问网站时,遇到了一个空白屏幕:
这可不好。幸运的是,开发者工具告诉抛出了一个通用的500错误,这总是非常有帮助的。所以需要深入挖掘。
在排除500错误时,手头并没有太多信息。由于网站运行在Azure上,不能简单地远程桌面进入它并查看事件查看器或堆栈跟踪。
幸运的是,Azure站点提供了一个名为Kudu的服务。Kudu是Azure上基于Git部署的引擎,但它做了更多:
Kudu可以告诉几乎所有需要知道的关于应用程序的信息,并提供了许多伟大和有用的功能:
所有这些都是通过Azure网站自动为提供的。可以通过以下URL访问自己的网站:
https://{your-azure-site-name}.scm.azurewebsites.net/
在Kudu中挖掘了一段时间后,试图找出到底出了什么问题,遇到了以下行:
$ npm install sqlite3 --save
错误:找不到模块 'D:\home\site\wwwroot\node_modules\sqlite3\lib\binding\node-v46-win32-> ia32\node_sqlite3.node'
解决这个谜题的第一步是意识到实际的node-v46-win32-ia32文件夹在项目文件夹中根本不存在。
假设更新版本的Node正在寻找与该版本相对应的SQLite依赖项。所以决定通过更新位于wwwroot目录中的package.json文件来明确告诉Node使用哪个版本:
"engines": {
"node": "0.10.40 || ~0.12.0 || ^4.2.0",
}
这将迫使Node检查与现有的位置~\sqlite3\lib\binding\node-v11-win32-ia32相匹配的更适当的SQLite模块版本,这个位置实际上是存在的。
好消息是,网站实际上正在运行,坏消息是,仍然无法登录。
所以决定将ghost.db数据库下载到本地机器上,并使用DB Browser for SQLite来深入了解数据是什么样子的。
幸运的是,Ghost让这变得非常容易理解,只需要查看users表:
如所见,status字段设置为locked。这可不好。在查看了Ghost的文档之后,似乎一个快速的SQL查询可以修复这个问题:
UPDATE users SET locked = 'active'
在做出这个改变后,通过FTP上传了这个数据库副本并重新启动了网站,发现一切都按预期工作。
在将近两个月后,终于能够登录自己的博客了。