Nedaří se připojit k databázi
- weckho
- Člen | 94
Ahoj,
nedaří se mi připojit k databázi, stránka píše chybu:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Configuration must be array, string or ArrayObject.' in /home/weckho/Weby/test/libs/dibi/libs/DibiConnection.php:69 Stack trace: #0 /home/weckho/Weby/test/app/models/BaseModel.php(9): DibiConnection->__construct(NULL) #1 /home/weckho/Weby/test/app/bootstrap.php(16): BaseModel->__construct() #2 /home/weckho/Weby/test/document_root/index.php(6): require('/home/weckho/We...') #3 {main} thrown in /home/weckho/Weby/test/libs/dibi/libs/DibiConnection.php on line 69
V config.ini mám:
[production]
database.driver = mysql
database.host = "localhost"
database.username = "xxx"
database.password = "xxx"
database.database = "xxx"
database.lazy = TRUE
database.charset = utf8
database.result:objects = TRUE
service.Nette-Security-IAuthenticator = Users
[common.set!]
date.timezone = "Europe/Prague"
iconv.internal_encoding = "%encoding%"
mbstring.internal_encoding = "%encoding%"
include_path = "%appDir%;%libsDir%"
V BaseModel.php potom:
class BaseModel extends Object
{
protected static $db = null;
public function __construct()
{
if (self::$db === NULL)
self::$db = new DibiConnection(Environment::getConfig('database'));
}
function getDb()
{
return self::$db;
}
}
Díky moc.
- kravčo
- Člen | 721
Najskôr si na vývojovom serveri a nemáš nastavené pripojenie na databázu:
#0 …/app/models/BaseModel.php(9): DibiConnection->__construct(NULL)
Volanie Environment::getConfig('database')
ti vráti
NULL
…
Musíš nakonfigurovať pre produkciu i vývoj (kľudne i rovnako):
[common.set!]
date.timezone = "Europe/Prague"
iconv.internal_encoding = "%encoding%"
mbstring.internal_encoding = "%encoding%"
include_path = "%appDir%;%libsDir%"
[production < common]
database.driver = mysql
database.host = "localhost"
database.username = "xxx"
database.password = "xxx"
database.database = "xxx"
database.lazy = TRUE
database.charset = utf8
; database.result:objects = TRUE ;; toto je už zbytočné
service.Nette-Security-IAuthenticator = Users
[development < production]
database.database = "xxx_develop"
V príklade vyššie sa na vývojovom servri použijú rovnaké nastavenia ako na produkčnom, akurát sa vyberie iná databáza („xxx“ vs. „xxx_develop“).
Trochu kratšia ukážka je i v príklade CD-Collection.
A ešte by ti možno pomohla ladenka – Debug::enable()
niekde na začiatku bootstrap.php.
- weckho
- Člen | 94
Díky za radu, zkusil jsem nahradit svůj config.ini podle tvého návrhu, bohužel stále nefunguje :( Chyba se nezměnila. Co je ještě divný, laděnku mám zaplou. U chyby, kterou jsem řešil před touto, laděnka fungovala normálně… Můžu postnout jakýkoliv jiný kousek aplikace, jestli to pomůže..
Jinak ano, jsem na vývojovém serveru, u sebe na localhostu.
Děkuji moc.
- marek.dusek
- Člen | 99
To je jenom getter, musis volat „loadConfig“, tj. neco jako
Environment::loadConfig(APP_DIR.'/config.ini');
- weckho
- Člen | 94
Config je ve složce app :) Jeho obsah je nyní následující:
[common.set!]
date.timezone = "Europe/Prague"
iconv.internal_encoding = "%encoding%"
mbstring.internal_encoding = "%encoding%"
include_path = "%appDir%;%libsDir%"
[production < common]
database.driver = mysql
database.host = "localhost"
database.username = "weckho"
database.password = "123456"
database.database = "mojedb"
database.lazy = TRUE
database.charset = utf8
service.Nette-Security-IAuthenticator = Users
[development < production]
database.database = "mojedb"
Nemám DB rozdělenou na vývojovou a ostrou, tak se její název shoduje.. V tom snad ale chyba být nemůže. Ještě bych doplnil, že jedu na Ubuntu. Nepředpokládám ale, že to má s chybou cokoliv společného (jenom už zoufale hledám jakýkoliv rozdíl mezi mojim nefunkčním a vaším funkčním řešením :).
Jo jinak, chyba úplně stejná:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Configuration must be array, string or ArrayObject.' in /home/weckho/Weby/Realitik.cz/libs/dibi/libs/DibiConnection.php:69 Stack trace: #0 /home/weckho/Weby/Realitik.cz/app/models/BaseModel.php(9): DibiConnection->__construct(NULL) #1 /home/weckho/Weby/Realitik.cz/app/bootstrap.php(16): BaseModel->__construct() #2 /home/weckho/Weby/Realitik.cz/document_root/index.php(6): require('/home/weckho/We...') #3 {main} thrown in /home/weckho/Weby/Realitik.cz/libs/dibi/libs/DibiConnection.php on line 69
Díky moc.
- Ondřej Brejla
- Člen | 746
Co ti vrací toto v BaseModelu…
$config = Environment::getConfig('database');
Debug::consoleDump($config);
- weckho
- Člen | 94
Jsem už prostě v koncích :( Když zkouším podle vašich rad dumpnout chyby, žádná změna. Chyba pořád stejná.. nic víc, nic míň.
EDIT: Ještě sem hodím obsah bootstrapu, třeba někdo najde nějakou chybu tam:
// Step 1: Load Nette Framework
// this allows Nette to load classes automatically so that
// you don't have to litter your code with 'require' statements
require_once LIBS_DIR . '/Nette/loader.php';
//Autoload
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();
//Autentizace
require_once APP_DIR . '/models/Users.php';
$user = Environment::getUser();
$user->setAuthenticationHandler(new Users());
//Config load
Environment::loadConfig();
// Step 2: Enable Nette\Debug
// for better exception and error visualisation
Debug::enable();
// Step 3: Get the front controller
$application = Environment::getApplication();
// Step 4: Run the application!
$application->run();
Díky!
Editoval weckho (20. 7. 2009 23:11)
- Ondřej Mirtes
- Člen | 1536
Nemáš první připojení k databázi v konstruktoru Users
?
Prohoď Autentizaci
a Config load
.