Po aktualizaci nette/dibi nefungujou dotazy do databáze
- Petr Mašát
- Člen | 101
Hezký den,
trochu váhám zda stávající dotaz patří sem a nebo spíše na fórum
o dibi, jestliže jsem ho špatně umístil tak mě prosím nekamenujte.
Po delší době jsem se rozhodl že aktualizuji Nette (původní verzi žel nevím, ale hodil jsem ji případně na web – jednalo se o nějakou vývojovou verzi jenž jsem používal protože opravovala tenkrát nějaký bug).
Zkusil jsem použít stávající stabilní verzi Nette Framework 0.9.5 pro PHP 5.3 (dibi jsem si vzal také z této verze) a od té doby mi přestaly jít jakékoliv dotazy do databáze skončí na chybě:
DibiDriverException
ERROR: relation "page" does not exist LINE 1: SELECT * FROM "page" ^
Je jedno jaký dotaz zadám, vždy to skončí na stejné chybě jen se případně mění název tabulky.
Zkusil jsem použít i Nette Framework 1.0-alpha pro PHP 5.3 (ano trochu mě znervózňuje to označení alpha), bohužel se steným výsledkem.
Netušíte prosím někdo z Vás co s tím? Momentálně mohu zůstat u staré verze jenž mi fungovala, ale zaručeně jednou budu chtít aktualizovat…
Díky moc,
Petr MAŠÁT
- Dr.Diesel
- Člen | 53
Napada me zkusit napsat ten dotaz i se schematem, tj. neco jako
select * from "public"."page"
(nevim jak s tim escapovanim),
jestli neni treba v tomhle problem. Pokud projde, mozna pomuze neco
v tomhle duchu
Perhaps extending the search path with your schema will help you?
SET SEARCH_PATH TO "Financial", public;
Then you could write your query unqualified without the schema:
SELECT * FROM budget;
- westrem
- Člen | 398
Ukaz ako konfigurujes dibi (ake parametre jej davas pri connectu) (teda napr vypis z config.ini).
Nepouzival si v aplikacii predtym napr. prazdny substitution? Ten je v najnovsej dibi (verim, ze ta je v distribucii s 0.9.5) uz deprecated.
Problem totiz bude podla mna v tom, ze sa k DB prihlasis pod inym ako ocakavanym userom alebo mas v kazdej query nieco co sa substituovalo a generovalo spravny nazov tabulky.
- Petr Mašát
- Člen | 101
Zdravím,
Dr.Diesel: vyzkoušel jsem upravit volání na
$result = dibi::query(
'SELECT * FROM [public].[page]'
);
výsledek byl bohužel stejný, tj.
ERROR: relation "public.page" does not exist LINE 1: SELECT * FROM "public"."page" ^
westrem: zasílám ukázku konfigurace config.ini
[common]
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "%encoding%"
php.mbstring.internal_encoding = "%encoding%"
php.include_path = "%appDir%;%libsDir%"
variable.tempDir = %appDir%/cache
security.hash = "******"
service.Nette-Web-IUser = "MyUser"
[development < common]
database.driver = postgre
database.host = "*****"
database.username = "postgres"
database.password = "trini83"
database.database = "template1"
database.lazy = TRUE
database.charset = utf8
database.result:objects = TRUE
service.Nette-Security-IAuthenticator = Users
service.Nette-Security-IAuthorizator = Permission
[production < development]
database.host = "pg1.tojeono.cz"
database.username = "aikidohostivarcz"
database.password = "*****"
database.database = "aikidohostivarcz"
Prázdný substitution myslím nikde nepoužívám. Ani jsem nevěděl že něco takového je a jde.
Celý projekt jsem hodil na web, není to nijak tajný kód : )
Editoval tachyon (20. 8. 2010 1:02)
- westrem
- Člen | 398
Okej, chyba bude podla mna v tom, ze PostgreSQL na ine direktivi na nastavovanie pripojenia, tzn oprav si to na nasledovne:
[development < common]
database.driver = postgre
database.host = "*****"
database.user = "postgres"
database.password = "trini83"
database.dbname = "template1"
database.lazy = TRUE
database.charset = utf8
database.result:objects = TRUE
service.Nette-Security-IAuthenticator = Users
service.Nette-Security-IAuthorizator = Permission
[production < development]
database.host = "pg1.tojeono.cz"
database.user = "aikidohostivarcz"
database.password = "*****"
database.dbname = "aikidohostivarcz"
Pripadne este pridaj nasledovne:
database.postgre.port = 5432
A host, pokial nemas niekde u providera vyslovene napisane zmen na localhost
- Petr Mašát
- Člen | 101
Hoj,
možná jsem slepota slepá, ale čím se liší prosím tě tvé nastavení od
mého? Třeba jsem něco přehlédl, zkusil jsem tam dát do config.ini tvůj
kousek kódu a také nefunguje : (
Jinak host mám nastaven na localhost, ty hvězdičky měli být místo toho
hesla. Holt psát komenty v jednu ráno se nevyplácí : )
Díky moc za trpělivost.
- iguana007
- Člen | 970
tachyon napsal(a):
Hoj,
možná jsem slepota slepá, ale čím se liší prosím tě tvé nastavení od mého? Třeba jsem něco přehlédl, zkusil jsem tam dát do config.ini tvůj kousek kódu a také nefunguje : (
Jinak host mám nastaven na localhost, ty hvězdičky měli být místo toho hesla. Holt psát komenty v jednu ráno se nevyplácí : )
Díky moc za trpělivost.
Já vidím rozdíl v user ⇒ username a dbname ⇒ database
- Petr Mašát
- Člen | 101
Takže jsem slepota slepá : )
Změnil jsem to dle komentáře, leč bohužel stále stejná chyba : (
Němá někdo prosím nějaký nápad co s tím? Pomalu ale jistě začínám
upadat do depresí.
- westrem
- Člen | 398
Panda napsal(a):
Opravdu má být jako název databáze „template1“?
Jinak je jedno, jestli ten klíč uvedeš jako „dbname“, nebo jako „database“, protože „database“ je alias pro „dbname“.
A jasne, nevsimol som si, ze v Driveri sa vola v kode este ::alias, kukal som len v dokumentacii, ze to ma ine predvolby. Kazdopadne toto plati iba pre dibi 1.3 Ked si pozries API pre 1.2 tak tam sa alias robi len pre user → username, nie pre dbname → database.
Avsak rovnaka otazka na tachyona, ma ten nazov byt naozaj template1? :)
- Petr Mašát
- Člen | 101
Ahoj všichni,
tak připojení se na databázi již funguje, chyba byla v nastavení
dbname – mělo tam být postgres a ne
template1.
Nyní se mi již stránka načte, ale z nějakého důvodu to ještě přestalo
nalézat šablonu @layout.phtml tj. vygeneruje to na stránku vždy
jen obsah
{include $content}
a nic okolo toho. Zkoušel jsem v BasicPresenter.php nastavit
$this->template->layout = "@layout.phtml";
leč nepomohlo : (
Netuší prosím ještě někdo co s tímto?
Ještě jednou díky za trpělivost.
- Panda
- Člen | 569
Z jaké verze Nette jsi aktualizoval na jakou? Už nějakou dobu se řeší vkládání šablony view do layoutu trochu jinak.
Doplnění: Tak se omlouvám, přečetl jsem si znovu první příspěvek. :-)
Mezi verzemi 0.9.4, kterou máš v tom ZIPu (verzi najdeš vždycky jako
konstantu ve třídě Framework
), a 0.9.5 by žádné
nekompatibility být neměly. Můžeš tady napsat příklad, jak vypadá Tvoje
šablona layoutu a nějakého view?
Editoval Panda (23. 8. 2010 9:56)
- Petr Mašát
- Člen | 101
Zasílám obsah souboru /app/presenters/PagePresenter.php – což je nejvíce používané view
<?php
use \Nette\Forms\Form;
/**
*
*/
class PagePresenter extends BasePresenter {
protected function startup() {
parent::startup();
$this->model = new PageModel();
if ($this->params['action'] == 'default' || $this->params['action'] == 'html') {
$this->page = $this->model->getPageFromUri($this->page_uri);
} else {
$this->page = $this->model->getPageFromId($this->params['id']);
}
$this->page_id = $this->page['id'];
$this->page_uri = $this->page['uri'];
$this->template->page_uri = $this->page['uri'];
$this->template->page_id = $this->page_id;
$this->template->page_presenter = $this->page['presenter'];
}
public function renderDefault($uri) {
$this->template->title = $this->page['title'];
$this->template->text = $this->texy->process($this->page['text']);
$this->template->test = $this->user->getIdentity();
/*
$filedownload = new FileDownload;
$filedownload->sourceFile = "./gallery/8-prev.jpg";
$filedownload->download();
*/
//FileDownload::getInstance()->setSourceFile("./gallery/8-prev.jpg")->download();
//throw new BadSignalException("aaa");
//throw new \Nette\Security\AuthenticationException("aaaaa");
}
public function renderCreate() { // ToDo toto přesunout do Admin presenteru
if (!$this->user->isAllowed('page', 'edit')) {$this->redirect('Admin:login');}
//$this->template->test = 'aaa';
if (!isset($this->params['parent'])) {
// v prvním kroku nového článku musíme zjistit kam že má patřit
$this->template->step = 1;
$this->template->structure_forPage = $this->getStructure(-1, 'page');
} else {
// v druhém kroku si zjistíme systémové věci
$this->template->step = 2;
$form = new Form;
$form->addText('object_name', 'Název objektu:')
->addRule(Form::FILLED, 'Pole nesmí být prázdné');
$form->addSubmit('send', 'Pokračovat');
$this->template->form = $form;
if ($form->isSubmitted()) {
if ($form->isValid() && $form['send']->isSubmittedBy()) {
$arr = $form->getValues();
$id = $this->model->createNewPage(2, $this->params['parent'], $arr['object_name']);
$this->template->test = $id;
if ($id) {
$this->redirect('Page:edit', array('id'=>$id));
} else {
// ToDo
}
}
}
}
}
public function renderEdit() {
if (!$this->user->isAllowed('page', 'edit')) {$this->redirect('Admin:login');}
$this->template->title = '';
$this->template->text = '';
$form = new Form;
$form->addGroup('Obsah');
$form->addText('title', 'Nadpis:')
->addRule(Form::FILLED, 'Pole nesmí být prázdné');
$form->addTextArea('text', 'Obsah');
$form->addSubmit('preview', 'Náhled celé stránky');
$form->addSubmit('save', 'Uložit');
$form->addSubmit('cancel', 'Zrušit');
$form->addGroup('Systémové věci');
$form->addText('object_name', 'Název objektu:')
->addRule(Form::FILLED, 'Pole nesmí být prázdné');
$form->addText('order', 'Pozice');
$this->template->form = $form;
if ($form->isSubmitted()) {
if ($form->isValid() && $form['preview']->isSubmittedBy()) {
$arr = $form->getValues();
$this->template->title = $arr['title'];
$this->template->text = $this->texy->process($arr['text']);
}
else if ($form->isValid() && $form['save']->isSubmittedBy()) {
$this->model->setPage($this->page_id, $form->getValues());
//$this->redirect('Page:html', $this->page_uri);
// musime si na chvilku vytvorit objekt s novou stránkou aby jsme věděli její uri
$page = $this->model->getPageFromId($this->params['id']);
header('Location: '.$page['uri']);
}
else if ($form['cancel']->isSubmittedBy()) {
// $this->redirect('Page:html', $this->page_uri);
// $this->redirect('Page:default', 'index.html');
header('Location: '.$this->page_uri);
}
} else {
$form->setDefaults(array(
'title' => $this->page['title'],
'text' => $this->page['text'],
'object_name' => $this->page['object_name'],
'order' => $this->page['order'],
));
}
}
public function handleSave() {
//$this->redirect('this', array('uri' => $uri));
}
public function renderSignOut($uri) {
$this->user->signOut();
// $this->redirect('Page:html', $this->page_uri);
header('Location: /index.html');
}
}
a dále jeho šablonu /app/templates/Page/default.phtml
<h1>{$title}</h1>
{!$text}
{if $user_canEdit}
<p id="menu_smallAdmin">
<a href="{plink Page:edit, 'id'=>$page_id}">Editovat stránku</a>
{*<a href="{plink Page:signOut 'id'=>$page_id}">Odhlásit se</a>*}
</p>
{/if}
a celé by se to mělo vykreslovat skrze /app/templates/@layout.phtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="copyright" content="Petr MAŠÁT, © 2009" />
<meta name="author" content="Petr MAŠÁT, © 2009" />
<meta name="author" content="mailto:tachyon@atlas.cz" />
<link rel="stylesheet" type="text/css" media="print" href="/css/print.css" />
<link rel="stylesheet" type="text/css" media="screen,projection" href="/css/basic.css" />
<!--[if lte IE 6]>
<link rel="stylesheet" type="text/css" media="screen,projection" href="css/basic-lte-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="screen,projection" href="/css/jquery-lightbox-05.css" />
<script src="/js/jquery.js" type="text/javascript"></script>
<script src="/js/jquery.ui.js" type="text/javascript"></script>
<script src="/js/jquery.nette.js" type="text/javascript"></script>
<script src="/js/jquery-lightbox-05-min.js" type="text/javascript"></script>
<script src="/js/global.js" type="text/javascript"></script>
<script src="/js/texyla.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="/css/texyla.css">
<link href="/favicon.ico" rel="shortcut icon" />
<title>Aikido Hostivař</title>
{if isset($robots)}<meta name="robots" content="{$robots}">{/if}
<script type="text/javascript">
$(function () {
$("textarea").texyla({
width: 500,
iconPath: "/image/texyla/icons/%var%.png",
bottomLeftToolbar: []
});
});
</script>
</head>
<body>
<div id="layout">
<ul id="skips">
<li><a href="#content">Skočit na obsah</a></li>
<li><a href="#menu">Skočit na menu</a></li>
<li><a href="#search">Skočit na vyhledávání</a></li>
</ul> <!-- #skips -->
<p id="header">
<a href="/" id="logo"><img src="/image/logo.jpg" alt="Aikido Hostivař" width="281" height="171" /><span></span></a><span></span>
</p> <!-- #header -->
<div id="content">
{snippet}
{include $content}
{/snippet}
</div> <!-- #content -->
{include "@layout_menu_main.phtml"}
<div id="footer">
<p>Copyright © 2009, Petr MAŠÁT | <a href="mailto:info@aikidohostivar.cz">info@aikidohostivar.cz</a>, <a href="{plink Admin:default}">administrace</a></p>
</div> <!-- #footer -->
</div> <!-- #layout -->
{include "@layout_menu_admin.phtml"}
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-184064-1");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>
Jinak jsem celý projekt hodil na síť .
Editoval tachyon (25. 8. 2010 9:12)
- Petr Mašát
- Člen | 101
Hoj,
zkusil jsem dát do /app/templates/Page/default.phtml dát nakonec
{include '../@layout.phtml'}
poté se mi @layout.phtml již vykreslila (musel jsem v ní
ještě zakomentit část s {include $content}) ale obsah se mi
vykreslil na začátek stránky.
Myslel jsem že Nette defaultně to co je v šabloně
/app/templates/Page/default.phtml dá do proměnné jenž pak použije
v @layout.phtml, ale nyní to vypadá že mám tuto funcionalitu
nějak vypnutou. Dá se prosím nějak opět zapnout a nebo budu muset ve všech
šablonách uzavírat obsah do {block #content} a ten potom volat v
@layout.phtml? Zkoušel jsem použít
$this->setLayout("layout");
v /app/presenters/PagePresenters leč nepomohlo : (
Díky za trpělivost.
- Petr Mašát
- Člen | 101
Hezký večer všem,
tak jsem již snad všechny problémy s přechodem dovyřešil. Aby se volala šablona @layout.phtml tak jsem musel ve všech stránkách (např. v /app/templates/Page/default.phtml) zabalit kód do
{block #content}
....
{/block}
a pak v @layout.phtml vypisovat toto ne pomocí
{include $content}
ale přepsat to na
{include #content}
Děkuji všem za ochotu, snad na další trable s přechodem nenarazím.