Dibi is not connected to database

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Manny7
Člen | 67
+
0
-

Ahoj,
procházím postupně jednotlivé kroky QSu a v tomto díle jsem narazil na problém, který vystihuje předmět tohoto topicu.
Do bootstrapu jsem dal následující kód (úplně na konec):

dibi::connect(Environment::getConfig('database'));

A dostanu tu error hlášku z předmětu.

Někde na foru jsem tady viděl příspěvek, ve kterém byla radu zkusit do bootstrapu vložit:

dibi::connect($config['database']));

Ale tohle bohužel způsobí, že budu mít jen bílou stránku.

[Soubory: v app/models/ mám Todo.php a TodoManager.php]

Předěm děkuji za jakékoli pošťouchbutí dopředu.

Blizzy
Člen | 149
+
0
-

Neznám sice moc Quick start, ale napadá mě, kde by mohl být problém. Pokud jsi řádek přidal až na konec bootstrapu, tj. za application->run, tak se nejdřív spustí aplikace, a poté, až skončí, tak se teprve připojíš k databázi. To by vysvětlovalo to hlášku ‚Dibi is not connected to database.‘, která vyskočí někdy během aplikace, a dibi ještě není připojené.

Pokud je to tento problém, řešení je jasné, připojit se dřív, než se dibi poprvé použije, například dát ten řádek před $application->run.

Já osobně se připojuji přidáním callbacku do události onStartup aplikace tak, jak je popsáno v tutoriálu Návštěvní kniha využívající AJAX. Ale tohle řešení bych nedoporučoval, pokud nerozumíš událostem, zkrátka vhodné až pro pokročilejší uživatele.

Editoval Blizzy (24. 7. 2010 20:21)

Manny7
Člen | 67
+
0
-

ahoj, díky za rychlo odpověď.. nicméně když přehodím onen řádek před application->run, tak zase dostanu hlášku „No database selected“

redhead
Člen | 1313
+
0
-

do configu musíš uvést i jméno databáze database.database = jmenoDatabaze

Manny7
Člen | 67
+
0
-

@redhead: ahoj, jméno db mám uvedeno (níže jsem uvedl to, co mám v config.ini – ujišťuju, že přihlašovací údaje k databázi jsou platné)

[production < common]
database.driver = mysql
database.database = jmeno_db
database.charset = utf8
database.lazy = TRUE
database.host = localhost
database.username = root
database.password = heslo


[development < common]
; database options in development mode
database.profiler = TRUE
database.username = root
database.password = heslo
Manny7
Člen | 67
+
0
-

tak přidal jsem „database.database = jmeno_db“ i do části „[development < common]“ a už to jede… ale mám rozhozenou češtinu… přidal jsem teda do te spodní části i „database.charset = utf8“… no a tak mě napadá… k čemu jsou tyto dvě hlavní části v configu? [zatím jsem se to nikde nedočetl]

redhead
Člen | 1313
+
0
-

Když to sjednotíš všechno do [common] a v [development < common] necháš třeba jen ten profiler, tak nebudeš mít redundantní údaje.

Jinak to rozdělení je kvůli tomu, co chceš aby bylo pouze v development nebo pouze v production módu (třeba jiné přihlašovací údaje pro dev jiné pro production). Pokud je něco společné, dej to do common (jinak [neco < common] znamená, že neco dědí od common)

Editoval redhead (25. 7. 2010 1:27)

KillPrd
Začátečník | 110
+
0
-

Ahoj měl jsem podobný problém a problém byl ve verzy nette
jedna verze
dibi::connect(Environment::getConfig(‚database‘));
druhá verze
dibi::connect(NEnvironment::getConfig(‚database‘));