2016-06-25 7 views
0

, also versuche ich meine Nodejs-Anwendung auf Heroku zu implementieren.
Ich habe das Startskript in package.jsonFehlendes Skript: Beginnen Sie mit der Bereitstellung von Nodejs auf Heroku

definiert
"scripts": { 
    "test": "./node_modules/.bin/mocha -r mocha-cakes", 
    "start": "rm -r -f database/test.db && node app.js", 
    "start-win": "del database\\test.db && node app.js" 
} 

ich auch web: rm -r -f database/test.db && node app.js zum Procfile hinzugefügt haben

jedoch noch meine dyno mit dem folgenden Protokollfehler stürzt:

2016-06-25T12:27:58.216435+00:00 heroku[web.1]: Starting process with command `npm start` 
2016-06-25T12:28:00.503447+00:00 app[web.1]: npm ERR! argv "/app/.heroku/node/bin/node" "/app/.heroku/node/bin/npm" "start" 
2016-06-25T12:28:00.502867+00:00 app[web.1]: npm ERR! Linux 3.13.0-85-generic 
2016-06-25T12:28:00.504156+00:00 app[web.1]: npm ERR! npm v3.8.6 
2016-06-25T12:28:00.503707+00:00 app[web.1]: npm ERR! node v5.11.1 
2016-06-25T12:28:00.506550+00:00 app[web.1]: npm ERR! missing script: start 
2016-06-25T12:28:00.506746+00:00 app[web.1]: npm ERR! 
2016-06-25T12:28:00.506912+00:00 app[web.1]: npm ERR!  <https://github.com/npm/npm/issues> 
2016-06-25T12:28:00.516583+00:00 app[web.1]: 
2016-06-25T12:28:00.516795+00:00 app[web.1]: npm ERR! Please include the following file with any support request: 
2016-06-25T12:28:00.516913+00:00 app[web.1]: npm ERR!  /app/npm-debug.log 
2016-06-25T12:28:00.506796+00:00 app[web.1]: npm ERR! If you need help, you may report this error at: 
2016-06-25T12:28:00.505628+00:00 app[web.1]: 
2016-06-25T12:28:01.445657+00:00 heroku[web.1]: Process exited with status 1 
2016-06-25T12:28:01.461079+00:00 heroku[web.1]: State changed from starting to crashed 
2016-06-25T12:28:01.461867+00:00 heroku[web.1]: State changed from crashed to starting 
2016-06-25T12:28:04.433811+00:00 heroku[web.1]: Starting process with command `npm start` 

ich überprüft haben mit den anderen SO-Fragen und keiner der Antworten hat mein Problem gelöst. Ich habe alles versucht, was die anderen Beiträge empfohlen haben, aber noch keinen Erfolg gefunden.

Here is the link to my repo if you want to see the source code.

+0

wo ist deine 'procfile'? – Gintoki

+0

@John es ist in der Wurzel der Anwendung. (selbe Stelle wie die package.json Datei) – HPSS

+0

Welche Art von DB benutzen Sie? – sznrbrt

Antwort

0

In der /database/database.js Datei nach dem Erstellen von Tabellen, wenn diejenigen, die nicht vorhanden ist, gibt es eine db.run Abfrage, die die XML-Datei liest.

db.run('INSERT OR IGNORE INTO managers (username, password) VALUES ("admin","admin")', function(){ 
    // 
    // Dear fellow coder: 
    // 
    // Once you are done trying to 'optimize' this routine, 
    // and have realized what a terrible mistake that was, 
    // please increment the following counter as a warning 
    // to the next guy: 
    // 
    // total_hours_wasted_here = 3 
    // 
    // When I wrote this, only God and I understood what I was doing 
    // Now, God only knows 
    // 
    // Magic, Do not touch 

    //initialise the table values from log file 
    // I want to read the xml file after the database tables have been created. HACK HACK!!! 
    $this.readLogFile(); 
    console.log('Loaded Data from XML document'); 
});  

Ich bin nicht sicher, was ist der Grund neben dem Testen, dass Sie dies in Ihrem bereitgestellten Code haben. Ich nehme an, der Grund, warum Sie die DB nach der Bereitstellung löschen möchten, besteht darin, dass Sie sie nur beim Testen benötigen.

Da Heroku scheint nicht zu mögen rm -r -f database/test.db, würde ich vorschlagen, dass Sie dies für die Bereitstellung oder als eine elegantere Lösung hinzufügen eine if-Anweisung vor dem Aufruf dieser DB-Abfrage, die es nur ausgeführt, wenn Sie eine TESTING-Umgebungsvariable mit haben ein boolescher Wert von true. Sie sollten auch rm -r -f database/test.db aus Ihrem Startskript löschen.

Das andere Problem mit Ihrem Ansatz ist, dass das Startskript ausgeführt wird, noch bevor die XML-Datei importiert wird, so dass jede Manipulation mit der DB im Startskript es nicht löschen würde.

Stattdessen können Sie auch eine Abfrage erstellen, die Sie bei jedem Start des Servers in app.js aufrufen. Diese Abfrage sollte die gesamte Datenbank leeren. Aber warum sollte man es lesen und löschen, wenn man es überhaupt nicht lesen kann.

+0

Danke für Ihre Antwort. Das Laden von Daten aus der XML-Datei war eine Voraussetzung für unser Gruppenprojekt, also war es nicht meine Entscheidung. Jedes Mal, wenn ein Benutzer ein Ereignis ausführt, wird die Protokolldatei aktualisiert, sodass das System beim erneuten Bereitstellen des Systems Daten aus der Protokolldatei lesen und auf dem neuesten Stand sein kann. Ich weiß, es ist nicht die eleganteste Lösung, aber das ist alles, was wir vor der Einreichung tun können. – HPSS

+1

Ich sehe jetzt. Sie sollten versuchen, die 'rm -r -f-Datenbank/test.db' im Startskript zu' heroku pg: reset DATABASE' zu ändern – sznrbrt

Verwandte Themen