Razzle: Beispiele für die Bereitstellung in Azure?

Erstellt am 1. Feb. 2019  ·  4Kommentare  ·  Quelle: jaredpalmer/razzle

Ich versuche, eine Razzle-App für einen Azure App Service bereitzustellen, habe jedoch Probleme beim Ausführen des Servers. Ich habe die App erstellt und einen Build-Ordner erhalten. Dann habe ich diese web.config- Datei verwendet und die Einstiegspunkte in _build/server.js_ geändert. Die App scheint ok zu laufen, da ich die Logs und den Klassiker überprüft habe

_🚀 begonnen_

erscheint. Wenn ich auf die URL der App gehe, gibt es überhaupt keine Antwort. Nur ein Fehler 500, wenn die Anforderung das Zeitlimit überschreitet.

Ich habe den Build auf meinem lokalen Computer überprüft

node build/server.js

und alles funktioniert wie erwartet.

Hoffe ihr könnt helfen.

Grüße.

stale

Hilfreichster Kommentar

Hallo,

Dies hängt höchstwahrscheinlich mit #356 zusammen (Umgebungsvariablen wie PORT werden während der Buildzeit eingebunden). IISNode gibt die Named Pipe an, auf der über PORT lauscht, aber dies wird vom Server nicht übernommen, da Razzle den Zugriff auf process.env.PORT (wahrscheinlich auf 3000) während der Build-Zeit einfügt.

Wir verwenden diese Problemumgehung in razzle.config.js , um das Inlining von PORT zu verhindern:

module.exports = {
    ...
    modify: (config, { target, dev }, webpack) => {
        const appConfig = Object.assign({}, config);

        // <strong i="13">@BUG</strong>: Do not inline certain env vars; https://github.com/jaredpalmer/razzle/issues/356
        if (target === 'node') {
            const idx = appConfig.plugins.findIndex(plugin => plugin.constructor.name === 'DefinePlugin');
            const { definitions } = appConfig.plugins[idx];
            const newDefs = Object.assign({}, definitions);

            delete newDefs['process.env.PORT'];
            delete newDefs['process.env.HOST'];
            delete newDefs['process.env.PUBLIC_PATH'];

            appConfig.plugins = [].concat(appConfig.plugins);
            appConfig.plugins[idx] = new webpack.DefinePlugin(newDefs)
        }

        return appConfig;
    },
};

Alle 4 Kommentare

Hallo,

Dies hängt höchstwahrscheinlich mit #356 zusammen (Umgebungsvariablen wie PORT werden während der Buildzeit eingebunden). IISNode gibt die Named Pipe an, auf der über PORT lauscht, aber dies wird vom Server nicht übernommen, da Razzle den Zugriff auf process.env.PORT (wahrscheinlich auf 3000) während der Build-Zeit einfügt.

Wir verwenden diese Problemumgehung in razzle.config.js , um das Inlining von PORT zu verhindern:

module.exports = {
    ...
    modify: (config, { target, dev }, webpack) => {
        const appConfig = Object.assign({}, config);

        // <strong i="13">@BUG</strong>: Do not inline certain env vars; https://github.com/jaredpalmer/razzle/issues/356
        if (target === 'node') {
            const idx = appConfig.plugins.findIndex(plugin => plugin.constructor.name === 'DefinePlugin');
            const { definitions } = appConfig.plugins[idx];
            const newDefs = Object.assign({}, definitions);

            delete newDefs['process.env.PORT'];
            delete newDefs['process.env.HOST'];
            delete newDefs['process.env.PUBLIC_PATH'];

            appConfig.plugins = [].concat(appConfig.plugins);
            appConfig.plugins[idx] = new webpack.DefinePlugin(newDefs)
        }

        return appConfig;
    },
};

Hallo,

Dies hängt höchstwahrscheinlich mit #356 zusammen (Umgebungsvariablen wie PORT werden während der Buildzeit eingebunden). IISNode gibt die Named Pipe an, auf der über PORT lauscht, aber dies wird vom Server nicht übernommen, da Razzle den Zugriff auf process.env.PORT (wahrscheinlich auf 3000) während der Build-Zeit einfügt.

Wir verwenden diese Problemumgehung in razzle.config.js , um das Inlining von PORT zu verhindern:

module.exports = {
    ...
    modify: (config, { target, dev }, webpack) => {
        const appConfig = Object.assign({}, config);

        // <strong i="14">@BUG</strong>: Do not inline certain env vars; https://github.com/jaredpalmer/razzle/issues/356
        if (target === 'node') {
            const idx = appConfig.plugins.findIndex(plugin => plugin.constructor.name === 'DefinePlugin');
            const { definitions } = appConfig.plugins[idx];
            const newDefs = Object.assign({}, definitions);

            delete newDefs['process.env.PORT'];
            delete newDefs['process.env.HOST'];
            delete newDefs['process.env.PUBLIC_PATH'];

            appConfig.plugins = [].concat(appConfig.plugins);
            appConfig.plugins[idx] = new webpack.DefinePlugin(newDefs)
        }

        return appConfig;
    },
};

Ich habe diese Konfiguration ausprobiert, aber wenn ich den Befehl 'npm run start:prod ' auf meinem Local versuche, erhalte ich eine Fehlermeldung, dass Assets.json nicht gefunden wurde. Könnten Sie bitte diesbezüglich beraten?

@vbutani
Funktioniert es, wenn Sie die Zeile auskommentieren, in der wir 'process.env.PUBLIC_PATH' aus den Definitionen löschen?

@vbutani
Funktioniert es, wenn Sie die Zeile auskommentieren, in der wir 'process.env.PUBLIC_PATH' aus den Definitionen löschen?

Danke @fabianishere für die schnelle Antwort. Mein Fehler, während ich die vorgeschlagene Codeänderung durchführte, fand ich mein Problem mit dem benutzerdefinierten Code in der Modify-Methode.
Ihr Code funktioniert völlig ohne Änderung!! Die von Ihnen erstellte benutzerdefinierte Konfiguration ersetzt den hartcodierten PORT-Wert durch process.env.PORT in gebündeltem server.js.

Vielen Dank. :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

MaxGoh picture MaxGoh  ·  4Kommentare

sebmor picture sebmor  ·  4Kommentare

howardya picture howardya  ·  5Kommentare

kkarkos picture kkarkos  ·  3Kommentare

knipferrc picture knipferrc  ·  5Kommentare