2014-12-16 3 views
0

내 노드 응용 프로그램은 반환영원히 모니터링하고 sqlite3를

Error: SQLITE_CANTOPEN: unable to open database file 

내 응용 프로그램의 구조는 다음과 같습니다

.controllers/ 
|--getter.js 
|--setter.js 
.system.js 
.slave.js 

System.js을

var forever = require('forever-monitor'); 
var path = require('path'); 
var relativeDir = path.dirname(module.filename); 

var childWorker = new(forever.Monitor)(path.join(relativeDir,'slave.js'), { 
    max: 3, 
    silent: true, 
    options: [] 
}); 

slave.js

... 
var getter = require('./controllers/getter.js'); 
var setter = require('./controllers/setter.js'); 
... 
내가 상대 경로를 절대 경로로 변경하고 운 않고 데이터베이스의 소유자를 변경 시도했습니다

var fs = require('fs'); 
var sqlite3 = require('sqlite3').verbose(); 
var dbPath = '/ABSOLUTEPATH/db'; 
if (fs.existsSync(dbPath)) { 
    console.log("[Getter] DB file found"); 
    var db = new sqlite3.Database(dbPath, sqlite3.OPEN_READONLY); 
} 
else { 
    console.log("[Getter] Cannot find DB file"); 
} 

0

getter.js은/setter.js. 앱에서 데이터베이스 파일을 찾을 수는 있지만 어떤 이유로 열 수 없습니다.

그 후 간단한 "test.js"스크립트를 만들어 "system.js"라는 동일한 디렉토리에 두었습니다. 오류없이 작동하고 올바른 값을 반환했습니다.

var sqlite3 = require("sqlite3"); 
var dbPath = "/ABSOLUTEPATH/db"; 
var db = new sqlite3.Database(dbPath, sqlite3.OPEN_READONLY); 

var sqlQuery = 'SELECT lat, long FROM kkk'; 
db.get(sqlQuery, function(err, row) { 
    if (err) { 
     console.log(err); 
     console.log('err!'); 
    } else { 
     console.log(JSON.stringify(row)); 
    } 
    }); 

답변

1

"sudo chown www-data."를 db 파일 디렉토리에 작성하십시오.

다른 해결책 파일이 존재하는지 여부를 확인 하시겠습니까?

예 :

var fs = require ("fs");

var 존재 = fs.existsSync (dbfilepath);