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.