3

Node で Azure を試し、Wercker CI を使用して構築し、FTP 経由で Azure にデプロイしています。

しかし、これを機能させるのに問題があるようです。およびその他のアセットserver.jsとともにファイルをコピーしています。package.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 リポジトリを用意することもオプションではありません。

これを処理する方法について、いくつかの意見をいただければ幸いです。

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 アプリの Always On 設定を有効にして、一定期間リクエストを受けていない場合にサイトがアンロードされないようにすることができます。

さらに、展開後にいくつかのカスタム タスクが必要な場合は、展開後のアクション フックを参照して、カスタム展開スクリプトを構成できます。

于 2015-12-09T07:11:13.973 に答える
1

FTP 経由でデプロイする場合npm installは、自動的に実行されません。この場合、展開するフォルダーにすべての依存関係を含める必要があります。したがって、それを行って FTP 経由でデプロイするか、git を使用することができます。

git を使用する場合は、展開したくないファイルを .gitignore に追加してから、それらを個別に展開できます (つまり、それらを blob に配置します)。

于 2015-12-08T19:08:20.977 に答える