3

我正在使用 Node 试用 Azure,并使用 Wercker CI 构建然后通过 FTP 部署到 Azure。

但似乎我在让它工作时遇到了一些麻烦。我正在复制一个server.js文件以及 apackage.json和其他一些资产。但看起来没有任何东西运行该npm install命令。另外,我You do not have permission to view this directory or page.在到达该站点时得到一个。

有一个web.config具有以下配置的文件:

<!--
    This configuration file is required if iisnode is used to run node processes behind IIS or IIS Express.  For more information, visit:
    https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config
-->

<configuration>
    <system.webServer>
        <handlers>
            <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module -->
            <add name="iisnode" path="./server.js" verb="*" modules="iisnode"/>
        </handlers>
        <rewrite>
            <rules>
                <!-- Don't interfere with requests for logs -->
                <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
                        <match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$"/>
                </rule>
                <!-- Don't interfere with requests for node-inspector debugging -->
                <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">                    
                    <match url="^\.\/server.js\/debug[\/]?" />
                </rule>
                <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
                <!--<rule name="StaticContent">
                    <action type="Rewrite" url="./app/assets/{REQUEST_URI}"/>
                </rule>-->
                <!-- All other URLs are mapped to the Node.js application entry point -->
                <rule name="DynamicContent">
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
                    </conditions>
                    <action type="Rewrite" url="./server.js"/>
                </rule>
            </rules>
        </rewrite>
        <iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade;middleware\*.js"/>
    </system.webServer>
</configuration>

server.js很简单:

var http_1 = require('http');
var express = require('express');
var log4js_1 = require('log4js');
var morgan = require('morgan');
var split = require('split2');
// NOTE: Some of the features used are only available in ES6
// do not forget to start the server using `node --harmony` option so that everything will work properly,
// in case you use anything that is behind the staging flag.
// Check https://nodejs.org/en/docs/es6/#which-features-are-behind-the-es_staging-flag
// to see which features require the flag.
var app = express();
var APP_PORT = process.env.PORT || 5000;
var APP_PATH = __dirname + "/public";
// We will need to split the output from morgan into lines to avoid trailing line feeds,
// https://github.com/expressjs/morgan/issues/70.
var log = log4js_1.getLogger();
var log4jsStream = split().on('data', function (line) {
    log.debug(line);
});
app.use(morgan('tiny', { stream: log4jsStream }));
// `__dirname` in this case will be `./dist/` since we start the server from there.
app.use(express.static(APP_PATH));
app.all('/*', function (req, res) {
    res.sendFile(APP_PATH + "/index.html");
});
var server = http_1.createServer(app);
server.listen(APP_PORT, function () {
    // console.log(`Express server listening on port ${APP_PORT}`);
});

//# sourceMappingURL=server.js.map

最后,package.json包含必要的 deps。

所以我只是想知道,有没有办法将应用程序部署到 Azure 并触发npm install并启动 Web 服务器?

我可以看到,如果您通过 Git 进行部署,Kudu 将为我完成所有这些。但我认为在使用 Wercker 进行部署时,这不是我的选择。此外,我在 CI 构建期间编译了一些 TypeScript 文件,我不希望这些文件处于版本控制中,因此我需要在其中存储所有已编译文件的 git repo 也不是一种选择。

我真的很感激一些关于如何处理这个问题的意见。

4

3 回答 3

3

通过 FTP 部署npm install时不会自动运行。在这种情况下,您可以使用控制台运行npm install

于 2015-12-28T21:20:11.850 回答
2

根据您的描述,有点困惑:

所以我只是想知道,有没有办法将应用程序部署到 Azure 并触发 npm 安装并启动 Web 服务器?

我可以看到,如果您通过 Git 进行部署,Kudu 将为我完成所有这些。但我不认为这对我来说是一个选择

通常,通过 Git 将您的节点应用程序部署到 Azure,它会自动运行 npm install。如果您不想使用 Git,您更喜欢什么具体要求。

目前我无法重现您关于 Wercker 的问题。通过git部署时是否会出现错误?

根据您对@theadriangreen 的评论,您似乎npm install因为超时而失败了。如果是这样,您可以尝试启用 Web App 的 Always On 设置,以防止您的网站在一段时间内没有收到任何请求时卸载。

此外,如果您在部署后仍需要一些自定义任务,您可以参考部署后操作挂钩来配置您的自定义部署脚本。

于 2015-12-09T07:11:13.973 回答
1

通过 FTP 部署npm install时不会自动运行。在这种情况下,您将不得不在您部署的文件夹中包含所有依赖项。所以你可以这样做并通过 FTP 部署,或者你可以使用 git。

如果你使用 git,你可以将你不想部署的文件添加到你的 .gitignore 中,然后单独部署它们(即把它们放在一个 blob 中)。

于 2015-12-08T19:08:20.977 回答