У меня возникла проблема с открытием базы данных OrientDB (orientdb-community-1.6.3).OrientDB, OrientDB-PHP и Restler - Не удается открыть хранилище
Я могу получить доступ к серверу с помощью $db = new OrientDB(...)
.
Я могу связаться с моим администратором, используя $dbConnected = $db->connect(...)
.
Но открыв свою базу данных, или проверки его существования дают мне ошибку: com.orientechnologies.orient.core.exception.OStorageException: Cannot open the storage 'mydb' because it does not exist in path: /Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases//../databases/mydb
Подробнее:
С консоли OrientDB, работает отлично:
orientdb> connect plocal:../databases/mydb admin admin
Connecting to database [plocal:../databases/mydb] with user 'admin'...OK
orientDB>
PHP Фрагмент кода :
$dbInfo = array (
'datasource' => 'Database/OrientDB',
'persistent' => true,
'host' => 'localhost',
'port' => 2424,
'timeout' => 60,
'serverUsername' => 'admin',
'serverPassword' => 'admin',
'database' => 'plocal:../databases/mydb',
'databaseUsername' => 'admin',
'databasePassword' => 'admin'
);
// New OrientDB instance
try {
$db = new OrientDB ($dbInfo ['host'], $dbInfo ['port'], $dbInfo ['timeout']);
error_log ("dbUtil.php:dbOpen: new Orient:db:" . print_r ($db, true));
} catch (Exception $e) {
// Report error connecting to server
$exception = 404;
$message .= 'Database server ' . $dbInfo ['host'] . ':' . $dbInfo ['port'] . ' did not respond. ' . $e->getMessage();
}
if ($db) {
// Made the connection to the server, connect as user $dbInfo ['serverUsername']
try {
$dbConnected = $db->connect ($dbInfo ['serverUsername'], $dbInfo ['serverPassword']);
error_log ("dbUtil.php:dbOpen:dbConnected:" . $dbConnected);
} catch (OrientDBException $e) {
// Report error on $db->connect
$exception = 400;
$message .= 'Unable to connect to ' . $dbInfo ['datasource'] . ' as user ' . $dbInfo ['serverUsername'] . '. ' . $e->getMessage();
}
// Open the database
if ($dbConnected) {
try {
$dbExists = $db->DBExists ($dbInfo ['database']);
error_log ("dbUtil.php:dbOpen(" . $dbInfo ['database'] . "):dbExists:" . $dbExists);
if (! $dbExists) {
// Report database does not exist
$exception = 404;
$message .= "Database " . $dbInfo ['database'] . ' does not exist.';
}
} catch (OrientDBException $e) {
// Report err on $db->DBExists
$exception = 404;
$message .= "Error checking the existence of database " . $dbInfo ['database'] . ". " . $e->getMessage();
}
if ($dbExists) {
try {
$dbClusters = $db->DBOpen ($dbInfo ['database'], $dbInfo ['databaseUsername'], $dbInfo ['databasePassword']);
error_log ("dbUtil.php:dbOpen:DBOpen:dbClusters:" . print_r ($dbClusters, true));
} catch (OrientDBException $e) {
// Report error opening database
$exception = 400;
$message .= "Error opening database " . $dbInfo ['datasource'] . ' as user ' . $dbInfo ['databaseUsername'] . '. ' . $e->getMessage();
}
}
}
}
// Any problems?
if ($exception != 200) {
throw new RestException ($exception, $message);
}
Журнал ошибок:
[13-Jan-2014 04:33:22 UTC] dbUtil.php:dbOpen: new Orient:db:OrientDB Object
(
[host:OrientDB:private] => localhost
[port:OrientDB:private] => 2424
[socket] => OrientDBSocket Object
(
[socket:OrientDBSocket:private] => Resource id #2
[bufferLen:OrientDBSocket:private] => 16384
[debug] =>
)
[debug:OrientDB:private] =>
[clientVersion] => 15
[protocolVersion] =>
[connected:protected] =>
[DBOpen:protected] =>
[active:protected] => 1
[sessionIDServer:OrientDB:private] =>
[sessionIDDB:OrientDB:private] =>
[cachedRecords] => Array
(
)
)
[13-Jan-2014 04:33:22 UTC] dbUtil.php:dbOpen:dbConnected:1
[13-Jan-2014 04:33:22 UTC] dbUtil.php:dbOpen(plocal:../databases/mydb):dbExists:
Ls на пути в сообщении об ошибке:
$ ls -la /Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases//../databases/mydb
total 5984
drwxr-xr-x 58 kent staff 1972 Jan 12 20:47 .
drwxr-xr-x 4 kent staff 136 Jan 12 16:43 ..
-rw-r--r-- 1 kent staff 66560 Jan 12 20:47 ORole.name.sbt
-rw-r--r-- 1 kent staff 66560 Jan 12 20:47 OUser.name.sbt
..
Любые идеи?
Спасибо
** Обновлено 2014-01-19 ** Добавлено УТОНЧЕННАЯ протоколирование на сервер.
2014-01-19 19:06:11:597 FINE [OMMapManagerNew] flushing pages in memory... [OMMapManagerNew]
2014-01-19 19:06:11:597 FINE [OMMapManagerNew] flushed 0/0 blocks [OMMapManagerNew]
2014-01-19 19:06:13:731 CONF Remote client connected from: OClientConnection [id=34, source=?, since=1390187173731] [OClientConnectionManager]
2014-01-19 19:06:13:733 CONF Remote client connected from: OClientConnection [id=35, source=/127.0.0.1:60842, since=1390187173732] [OClientConnectionManager]
2014-01-19 19:06:13:736 FINE Disconnecting connection OClientConnection [id=35, source=/127.0.0.1:60842, since=1390187173732]... [OClientConnectionManager]
2014-01-19 19:06:13:736 FINE Disconnected connection OClientConnection [id=35, source=/127.0.0.1:60842, since=1390187173732] found 1 channels [OClientConnectionManager]
2014-01-19 19:06:14:080 FINE [OClientConnectionManager] found and removed pending closed channel 34 (Socket[addr=/127.0.0.1,port=60842,localport=2424]) [OClientConnectionManager$1]
2014-01-19 19:06:41:597 FINE [OMMapManagerNew] flushing pages in memory... [OMMapManagerNew]
2014-01-19 19:06:41:597 FINE [OMMapManagerNew] flushed 0/0 blocks [OMMapManagerNew]
Добавлено error_log ("dbUtil.php.dbOpen:list of databases:" . print_r($db->DBList(), true));
после подключения к серверу:
[20-Jan-2014 03:06:13 UTC] dbUtil.php.dbOpen:list of databases:Array
(
[docitt] => plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/docitt
[GratefulDeadConcerts] => plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/GratefulDeadConcerts
)
Затем используется plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/docitt
в качестве имени базы данных. Те же ошибки: Database plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/docitt does not exist.
Ошибка говорит, что никакая база данных не может быть найдена с использованием предоставленного пути. Возможно, это связано с 'базами данных //../ баз данных'. папка 'databases', переместив одну папку назад, а затем снова войду в нее. Попробуйте использовать только' mydb'. –
@ SverriM.Olsen Я пробовал: 'mydb',' databases/mydb', 'local: mydb ',' plocal: ../ databases/mydb'. Они также не будут работать в console.sh. 'plocal: ../ databases/mydb' был единственным, кто работал в консоли. – Kent