缺少脚本:在将nodejs部署到heroku时启动

时间:2016-06-25 12:50:25

标签: javascript node.js heroku npm

所以我试图将我的nodejs应用程序部署到heroku 我在package.json

中定义了启动脚本
"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"
}

我还在web: rm -r -f database/test.db && node app.js

添加了Procfile

但是我的dyno仍然崩溃并出现以下日志错误:

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`

我已经检查了其他SO问题,但没有一个答案解决了我的问题。我已经尝试过其他帖子推荐的所有内容,但尚未找到任何成功。

  

如果您想查看源代码,请参阅我的回购邮件的link

1 个答案:

答案 0 :(得分:0)

在创建表后的/database/database.js文件中,如果那些表不存在,则会有一个db.run查询读取该XML文件。

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');
});      

我不确定除了测试你在部署的代码中有这个的原因是什么。我想你想要在部署后删除数据库的原因是你只需要在测试中使用它。

由于Heroku似乎不喜欢rm -r -f database/test.db,我建议您对此进行评论以进行部署,或者作为更优雅的解决方案,在调用此DB查询之前添加if语句,只有在您进行测试时才运行它布尔值为true的环境变量。您还应该从开始脚本中删除rm -r -f database/test.db

您的方法的另一个问题是启动脚本甚至在导入XML文件之前运行,因此在启动脚本中使用db进行的任何操作都不会删除它。

相反,您还可以创建每次启动服务器时在app.js中调用的查询。该查询应该清空整个数据库。但是为什么要阅读并删除它,当你根本不能阅读它时。