pgsql + volání dvou a více metod rozbíjí stránku
- heekon
- Člen | 28
Ahoj,
děje se mi následující věc a popravdě nevím zda je chyba u mě a nebo jde o bug.
Konfigurace:
nette: 2.0.4
databaze: pgsql / Nette\Database
Config:
services:
authenticator: Authenticator
objects: Objects
relations: Relations
Presenter:
private $relations;
private $objects;
private $auth;
protected function startup()
{
parent::startup();
$this->relations = $this->context->relations;
$this->objects = $this->context->objects;
$this->auth = $this->context->authenticator;
}
protected function createComponentMap()
{
return new Map($this->relations->findAll(),$this->objects->findPair('id','name'),$this);
}
Relations model: (objects a jiné modely / tabulky, jsou definovány stejně)
class Relations extends Table
{
/** @var string */
protected $tableName = 'relations';
}
A teď k chování.
Za tohoto savu dochází k rozbití šablony, kdy se posouvá
body o 24px dolů (jako by byla margin-top: 24px). Pokud se na
stránku koukám v IE, tak dojde někde k chybě JS, protože přestane
fungovat jQuery a další skripty. V případě Chrome a Firefoxu pouze
dochází k posunu body.
Pokud udělám následující změny, vše je ok:
private $relations;
private $objects;
private $auth;
protected function startup()
{
parent::startup();
/*
$this->relations = $this->context->relations;
$this->objects = $this->context->objects;
*/
$this->auth = $this->context->authenticator;
}
protected function createComponentMap()
{
return new Map($this->context->relations->findAll(),$this->context->objects->findPair('id','name'),$this);
}
A nakonec, pokud jsou ve startup() zakomentovány všechny řádky až na jeden, tak k tomu nedochází, pouze při volání 2 a více modelů.
Fakt už nevím kde je problém. Když jsem používal MySQL, tak se nic podobného nedělo.
Edit:
PS: a laděna mlčí
PPS: tak zatím se mi podařilo zjistit, že modelů může být kolik chce, ale
problém nastává u použití modelů s připojením na PostgreSQL. Budu
hledat dál.
Editoval heekon (13. 8. 2012 14:01)
- heekon
- Člen | 28
asi se na to opravdu podívám znovu, ale i když jsem vyhodil veškerý JS
a odlinkoval CSS, tak to dělalo pořád, bez ohledu na to, zda jsem byl
v produkčním nebo vývojovém módu … možná jsem něco přehlédl, ale
rozhodně tam není žádný řádek navíc a vypadá to, že k posunu
dochází mezi <body> a prvním výskytem <div>
pokud tam napíšu jakýkoliv text, objeví se v té mezeře, pokud za
<body> dám hned <div>, tak stejně se tam posun udělá
pokud napíšu layout naprosto minimalizovaně s tím, že v templatu se nic nepředává, je prázdný
<html><head></head><body><div>test</div></body></html>
tak i když takto vypadá zdroj, výstup je posunutý
ale jak říkám, kouknu na to zítra znovu, jen je mi záhadou vliv modelů, které jsou připojené na PostgreSQL
Editoval heekon (13. 8. 2012 21:54)
- heekon
- Člen | 28
nemožné, je na lokálním serveru
jde v podstatě o sandbox s nastavením připojení na PostgreSQL databázi a žádnou velkou změnou v základním layoutu s tím, že HomepagePresenter vypadá zhruba tak jak jsem zasílal → renderDefault nic nepředává a default.latte nic neobsahuje, tedy věci co by měli mít vliv na zobrazování nejsou nijak ovlivňovány. Když volám metody a dávám do proměných, tak je neposílám do renderu.
Při chybě bych čekal laděnku.
Jak říkám, ještě si to prohlédnu zítra, zda tam není nějaká podivná anomálie. Zkusím udělat zálohu a znovu to samé na čistém sandboxu a případně udělám nějaké screeny a pošlu sem.
- heekon
- Člen | 28
tak už vidím problém, celý obsah <head> se přesouvá do <body>
<html debug="true">
<head/>
<body class=" js">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="description" content="test"/>
<title>TEST</title>
<link rel="stylesheet" media="screen,projection,tv" href="http://192.168.1.2/nette/css/screen.css" type="text/css"/>
<link rel="stylesheet" media="print" href="http://192.168.1.2/nette/css/print.css" type="text/css"/>
<link rel="shortcut icon" href="http://192.168.1.2/nette/favicon.ico" type="image/x-icon"/>
<script type="text/javascript" src="http://192.168.1.2/nette/js/jquery-1.8.0.min.js"/>
<script type="text/javascript" src="http://192.168.1.2/nette/js/raphael.js"/>
<script type="text/javascript" src="http://192.168.1.2/nette/js/netteForms.js"/>
<script type="text/javascript" src="http://192.168.1.2/nette/js/jquery.nette.js"/>
<style>
<script>
<div id="wrapper">
<script>
<div id="ajax-spinner" style="display: none; "/>
<div id="nette-debug" style="display: block; ">
<div/>
tak a co teď s tim :), tady bych řekl, že jde o bug nette
Konfigurace serveru:
PHP 5.4.5 | Server Apache/2.4.2 (Win32) mod_fcgid/2.3.7 | Nette
Framework 2.0.4
Editoval heekon (14. 8. 2012 7:07)
- heekon
- Člen | 28
Vzorova konfigurace
config\config.neon
common:
parameters:
database:
driver: pgsql
host: 127.0.0.1
dbname: postgres
user: postgres
password: postgres
php:
date.timezone: Europe/Prague
# zlib.output_compression: yes
nette:
application:
errorPresenter: Error
session:
expiration: 14 days
database:
default:
dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%'
user: %database.user%
password: %database.password%
debugger: true
services:
authenticator: Authenticator
database: @Nette\Database\Connection
factories:
objects: Objects
relations: Relations
production < common:
development < common:
model\Objects.php
<?php
use Nette\Database\Connection,
Nette\Database\Table\Selection;
class Objects extends Selection
{
public function __construct(\Nette\Database\Connection $connection)
{
parent::__construct('objects', $connection);
}
}
model\Relations.php
<?php
use Nette\Database\Connection,
Nette\Database\Table\Selection;
class Relations extends Selection
{
public function __construct(\Nette\Database\Connection $connection)
{
parent::__construct('relations', $connection);
}
}
HomepagePresenter:
<?php
/**
* Homepage presenter.
*/
class HomepagePresenter extends BasePresenter
{
protected function startup()
{
parent::startup();
/**
* dávám fetch(), aby se provedl dotaz (jen pro testování chyby)
*/
$this->context->createRelations()->fetch();
$this->context->createObjects()->fetch();
}
public function renderDefault()
{
$this->template->anyVariable = 'any value';
}
}
bootstrap.php
<?php
/**
* My Application bootstrap file.
*/
use Nette\Application\Routers\Route;
// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';
// Configure application
$configurator = new Nette\Config\Configurator;
// Enable Nette Debugger for error visualisation & logging
//$configurator->setDebugMode($configurator::AUTO);
$configurator->setDebugMode(array('192.168.1.2','192.168.1.3'));
$configurator->addConfig(__DIR__ . '/config/config.neon',
$configurator->debugMode ? $configurator::PRODUCTION : $configurator::DEVELOPMENT);
$configurator->enableDebugger(__DIR__ . '/../log');
// Enable RobotLoader - this will load all classes automatically
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(APP_DIR)
->addDirectory(LIBS_DIR)
->register();
// Create Dependency Injection container from config.neon file
//$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();
// Setup router
$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
// Configure and run the application!
$container->application->run();
index.php
<?php
// uncomment this line if you must temporarily take down your site for maintenance
// require '.maintenance.php';
// absolute filesystem path to this web root
define('WWW_DIR', __DIR__);
// absolute filesystem path to the application root
define('APP_DIR', WWW_DIR . '/app');
// absolute filesystem path to the libraries
define('LIBS_DIR', WWW_DIR . '/libs');
// load bootstrap file
require APP_DIR . '/bootstrap.php';
NETTE_ROOT definuji pro spravne cesty aplikace
za tohoto stavu by to mělo chybu vyvolat
Editoval heekon (14. 8. 2012 8:20)