运行 IIS 中的 Ghost with Iisnode

Running Ghost in IIS with Iisnode

我在让 iisnode 和 ghost 一起玩时遇到问题。

我可以 运行 iisnode 提供的样本很好,我可以通过节点命令行得到 ghost up 和 运行ning 很好。我关注了我能找到的所有在线博客 post,以便将它们整合在一起。令人沮丧的是博客让这个过程看起来非常简单。

从查看 "ETW" 日志来看,iisnode 似乎无法使用命名管道 ("iisnode scheduled a retry of a named pipe connection to the node.exe process" x20+) 与节点进程通信,然后节点进程终止。

问题可能不在于 ghost,说实话我不知道该做什么或下一步要调整哪个部分。在这一点上我最好的猜测是某种权限问题,但我花了几个小时在我的开发机器上设置权限无济于事。

如果有帮助,我在浏览器中收到的错误消息是:错误:(代码:EACCES)启动服务器时出错。

为了回答我自己的问题,我逐行检查了 node.exe 的 Process Monitor 输出,看看我是否能看到任何奇怪的东西。我不是分析 Process Monitor 输出的专家,有大量 "Buffer Overflow" 消息和其他 可能 错误的东西,但后来我偶然发现了下一行:

Node.exe CreatePipe \MyProjects\WebsiteName\process.env.port\ INVALIDDEVICEREQUEST

设备无效?

然后一分钱终于掉了。在 config.js 中,您不想将端口设置为 'process.env.port'(正如 config.js 文件本身作为注释所建议的那样),您希望将端口设置为 process.env.port

没有引号。

澄清一下,这里是我的工作“config.js”的摘录:

config = {
    production: {
        url: 'http://my-blog.com',
        mail: {
            transport: 'SMTP',
            options: {
                service: 'Mailgun',
                auth: {
                    user: 'postmaster@my-blog.com',
                    pass: '9ed512da012cd454376947365xd71793'
                }
            }
        },
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },

        server: {
            host: '127.0.0.1',
            port: process.env.PORT // <-- HERE
        }
    },

    // ...

请注意底部的 port: process.env.PORT 行。

您也可以通过 "config.example.js" 文件搜索 "iisnode" 以获取更多信息。