Dibi Connection localhost vs. server

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

Ahoj,
mam v Nette použitou dibi, na localu mi to vše funguje v pohodě, jenže při přesunu na testovací server se mi nechce dibi připojit k DB. Laboruju s tím celý den, procházel sem snad všehny vlákna a prostě to nemůžu vyřešit :-(

config.neon

common:
    parameters:
        database:
            driver: mysql
            host: localhost
            database: pmi
            user: pmi
            password: zaheslovano
            lazy: true
            charset: utf8


    php:
        date.timezone: Europe/Prague
        # session.save_path: "%tempDir%/sessions"
        # zlib.output_compression: yes


    nette:
        session:
            expiration: '+ 14 days'


    services:
        database:
                class: DibiConnection(
                        '%database.driver%:host=%database.host%;dbname=%database.database%'
                        %database.user%
                        %database.password%
                )
                #setup:
                        #- setDatabaseReflection( Nette\Database\Reflection\DiscoveredReflection() )
        authorizator:
                class: AclPmi\Security\Acl
        authenticator:
                class: AclPmi\Security\Authenticator
                arguments: ['@database']


    factories:


production < common:

development < common:

bootstrap.php

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->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();
dibi::connect($container->params['database']);

// Setup router
$container->router[] = new Route('index.php', 'Sign:', Route::ONE_WAY);
$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Sign:in');


// Configure and run the application!
$container->application->run();

dokonce sem zkoušel na prasáka do bootstrapu tohle:

dibi::connect(array('driver'=>'mysql','host'=>'localhost','database'=>'pmi','user'=>'pmi','password'=>'zaheslovano'));

ale v obou případech sem se dočkal pouze exception v logu http://img23.imageshack.us/…612at234.png

Prosím o pomoc, už netuším co sem kde zprskal. Díky

nanuqcz
Člen | 822
+
0
-

Ahoj, s největší pravděpodobností máš špatné údaje k DB. Podaří se ti připojit k DB pomocí klasického mysql_connect?

// bootstrap.php
mysql_connect($container->params['database']['host'], $container->params['database']['user'], $container->params['database']['password']);
mysql_select_db($container->params['database']['database']);
besir
Člen | 170
+
0
-

nanuqcz napsal(a):

Ahoj, s největší pravděpodobností máš špatné údaje k DB. Podaří se ti připojit k DB pomocí klasického mysql_connect?

// bootstrap.php
mysql_connect($container->params['database']['host'], $container->params['database']['user'], $container->params['database']['password']);
mysql_select_db($container->params['database']['database']);

Ahoj, zkoušel jsem vypsat params a ty se zdaj byt v pořádku. Údaje k DB jsou v pohodě, přes adminer se s nima přihlásim. Zkooušel jsem v configu i toto:

services:
    database:
            class: DibiConnection(
                    '%database.driver%:host=%database.host%;dbname=%database.database%'
                    'username=pmi'
                    'password=zaheslovano'
            )

nebo

services:
    database:
            class: DibiConnection(
                    '%database.driver%:host=%database.host%;dbname=%database.database%'
                    'pmi'
                    'zaheslovano'
            )
JuniorJR
Člen | 181
+
0
-

Nechybí ti čárky mezi parametry? Nikdy jsem to nezkoušel, takže nevím… Ale jelikož ti to neháže chybu, tak to asi bude v pořádku.

class: DibiConnection(
    '%database.driver%:host=%database.host%;dbname=%database.database%',
    %database.user%,
    %database.password%
)

Editoval JuniorJR (13. 6. 2012 11:58)

besir
Člen | 170
+
0
-

JuniorJR napsal(a):

Nechybí ti čárky mezi parametry? Nikdy jsem to nezkoušel, takže nevím… Ale jelikož ti to neháže chybu, tak to asi bude v pořádku.

class: DibiConnection(
    '%database.driver%:host=%database.host%;dbname=%database.database%',
    %database.user%,
    %database.password%
)

Nn, čárky to nedělají, nechápu to, na localhostu to funguje normálně. Kdyby měl eventuelně někdo chuť, mohu na server zřídit ftp přístup do adresáře s aplikací :-)

Milo
Nette Core | 1283
+
0
-

V configu to máš jako service a pak stejně používáš dibi::connect(). Seš si jistej, že ta vyjímka vyskakuje právě v bootstrap.php?

JuniorJR
Člen | 181
+
0
-

A zkusil si ještě promazat cache?

besir
Člen | 170
+
0
-

Milo napsal(a):

V configu to máš jako service a pak stejně používáš dibi::connect(). Seš si jistej, že ta vyjímka vyskakuje právě v bootstrap.php?

No právě ze to nevyskakuje v bootsrapu, ale ze service, kdyz to z bootstrapu smazu tak se nic nedej. Porad se to tvari uplne stejne.

@JuniorJR Cache sem mazal už asi 1 000 002× :D mazu ji po kazde zmene.

Editoval besir (13. 6. 2012 13:19)

Milo
Nette Core | 1283
+
0
-

DibiConnection používá jinou syntax DSN než PDO. Viz. DibiConnection API:https://api.dibiphp.com/…ion.php.html#68

Takže buď:

class: DibiConnection(
	'driver=%database.driver%&host=%database.host%&dbname=%database.database%&user=%database.user%&password=%database.password%'
)

Nebo rovnou:

class: DibiConnection(%database%)

Editoval Milo (13. 6. 2012 15:03)

Filip Procházka
Moderator | 4668
+
0
-
besir
Člen | 170
+
0
-

HosipLan napsal(a):

Zase?!

Podle toho a kamarada zdrojaku jsem to rozchodil na localu, ale na serveru od wedosu to přestalo chodit.

Nebo rovnou:

class: DibiConnection(%database%)

Jinak tohle chodi, nechapu ze vyse napsana jako prvni prispevek na lokalu funguje :-/ Nicmene ted jsem u jine chyby :D

Editoval besir (13. 6. 2012 17:16)

besir
Člen | 170
+
0
-

No tak na jendom serveru mi to funguje (savana) a na druhem ne (wedos). V config.neon mam adresu serveru 127.0.0.1 ,ale dibi si nekde nevim kde vycuca vm2743.wedos.net . Coz je sice teoreticky spravne, ale neda se tak pripojit k DB. Testovano v admineru. Nenapada Vas este kde by to mohla brat? Cache smazana.

Editoval besir (13. 6. 2012 21:54)

22
Člen | 1478
+
0
-

Je úplně zbytečné spamovat obě fora (dibi, nette). Jinak Nette si určitě nikde tu hodnotu nevymslí. Bere ji z cache Configuratoru, leda by jsi někde později tu hodnotu nějak měnil.

besir
Člen | 170
+
0
-

22 napsal(a):

Je úplně zbytečné spamovat obě fora (dibi, nette). Jinak Nette si určitě nikde tu hodnotu nevymslí. Bere ji z cache Configuratoru, leda by jsi někde později tu hodnotu nějak měnil.

No tak chyba na straně serveru, sice to dost dobře nechápu, ale prostě to tak je. Ten dotaz ze 127.0.0.1 na vm2743.wedos.net asi přeložil wedos. Jediné co jsem udělal bylo povolení přístupu k DB z vnějšku, to bude chtít ale určitě ošetřit. Je to díra.
Nicméně stále nechápu proč adminer se připojil, ale nette, resp. dibi ne :-(

22
Člen | 1478
+
0
-

Proč používáš localhost(127.0.0.1) u Wedosu? správně by jsi tam měl dát přidělenou adresu DB serveru. Moc nevím, co vymýšlíš..

besir
Člen | 170
+
0
-

22 napsal(a):

Proč používáš localhost(127.0.0.1) u Wedosu? správně by jsi tam měl dát přidělenou adresu DB serveru. Moc nevím, co vymýšlíš..

No jenže přes tu se nepřipojim pokud nemam povolený přístup z vnějšku… :-( Nevím přesně jak to mají pošetřené, mam VPS u nich. Teprve se tam rozkoukávám a jelikož sem ji převzal a je tam pár projektů tak nechci moc laborovat…

Editoval besir (14. 6. 2012 0:51)

Aurielle
Člen | 1281
+
0
-

Pokud se potřebuješ ze své VPS dostat k databázi pod jiným účtem a vzdáleně to nefunguje, musíš to vyřešit s podporou. Jinak VPS mívá (dle konfigurace) databázi svoji na localhostu, a uvedením localhost se dostáváš k sobě, nikoliv do té externí databáze.