Nette na wedos – Nette\DI\ServiceCreationException

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

Zdravím, řeším teď nette na wedosu a nevím si rady jak pokračovat. Vše mi na localhostu funguje, když jsem to ale hodil na webhosting wedos, vyhodilo mi to chybu:

Nette\DI\ServiceCreationException

Service 'basket': No service of type Nette\Database\Connection found.
Make sure the type hint in Method Table::__construct() is written correctly
and service of this type is registered.

Můj config je tento:

common:
	parameters:

	php:
		date.timezone: Europe/Prague
		# zlib.output_compression: yes

	nette:
		application:
			errorPresenter: Error

		session:
			autoStart: smart
			expiration: "+ 30 minutes"

		debugger:
			strictMode: true
			bar:
				- @sessionPanel

	services:
		database: @Nette\Database\Connection
		authenticator: Authenticator

		category: CategoryModel
		order: OrderModel
		product: ProductModel
		users: UserModel
		basket: BasketModel
		comments: CommentModel
		deliveryPayment: DeliveryPaymentModel
		setting: SettingModel
		emailTemplate: EmailTemplateModel

		sessionPanel:
			class: SessionPanel
			arguments:
				- @application
				- @session

	factories:

production < common:
	nette:
		database:
			driver: mysql
			socket: /tmp/mysql50.sock
			host: wm28.wedos.net
			database: d38550_matylan
			username: user
			password: pass
			profiler: TRUE
			charset: utf8

development < common:
	nette:
		database:
			default:
				dsn: 'mysql:host=127.0.0.1;dbname=matyIsland'
				user: root
				password: pass

Netuším kde hledat chybu, když na localu to funguje a na wedosu už ne. Víte někdo co s tím nebo jak postupovat?

ViPEr*CZ*
Člen | 817
+
0
-

Jak vypadá konstruktor BasketModel?

Michal Vyšinský
Člen | 608
+
0
-

Zkusím… Co smazat cache? (Snad nejčastější chyba)

Draffix
Člen | 146
+
0
-

@CherryBoss To už jsem zkoušel snad stokrát a pořád nic

@Viper Já BasketModel dědím z TableModel:

class BasketModel extends Table {

    /** @var string */
    protected $tableName = 'basket';

Zbytek už jsou metody s sql dotazy

TableModel mám takto:

abstract class Table extends Nette\Object {

    /** @var Nette\Database\Connection */
    protected $connection;

    /** @var string */
    protected $tableName;

    /** @var Nette\Http\SessionSection */
    public $mySession;

    /**
     * @param Nette\Database\Connection $db
     * @throws \Nette\InvalidStateException
     */
    public function __construct(Nette\Database\Connection $db, Nette\Http\Session $session) {
        $this->connection = $db;
        $this->mySession = $session;

        if ($this->tableName === NULL) {
            $class = get_class($this);
            throw new Nette\InvalidStateException("Název tabulky musí být definován v $class::\$tableName.");
        }
    }

A zbytek zase metody s sql dotazy. Spíše mi není jasné, proč to hlásí jenom u toho BasketModel, když všechny jiné modely jsou vesměs stejné.

ViPEr*CZ*
Člen | 817
+
0
-

Špatně definované připojení k db… už jsem si to prohlédl až do konce. Definuj database pro produkci stejně jako pro devel.

Draffix
Člen | 146
+
0
-

Ještě jsem si všiml, že když zkusím do configu ve vývojovém prostředí vložit připojení k wedosu (namísto localhostu), tak mi to vypisuje stejnou chybu:

development < common:
	nette:
		database:
			driver: mysql
			socket: /tmp/mysql50.sock
			host: wm28.wedos.net
			database: d38550_matylan
			username: user
			password: pass
			profiler: TRUE
			charset: utf8
Draffix
Člen | 146
+
0
-

Super, chyba byla v tom, už to jede, děkuji. Nicméně mi teď nejedou žádné odkazy a nechci kvůli tomu zakládat nové vlákno, mohl by mi někdo tedy poradit jak to zprovoznit?

htaccess globální

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ /www/ [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/www/
    RewriteRule ^(.*)$ /www/$1
</IfModule>

htaccess ve www složce

# Apache configuration file (see httpd.apache.org/docs/2.2/mod/quickreference.html)

# disable directory listing
Options -Indexes

# enable cool URL
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # prevents files starting with dot to be viewed by browser
    RewriteRule /\.|^\. - [F]

    # front controller
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

# enable gzip compression
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>

# allow combined JavaScript & CSS. Inside of script.combined.js you could use <!--#include file="script.js" -->
<IfModule mod_include.c>
    <FilesMatch "\.combined\.(js|css)$">
        Options +Includes
        SetOutputFilter INCLUDES
    </FilesMatch>
</IfModule>

Když kliknu na nějaký odkaz, wedos mi hlásí toto:

Internal Server Error

Pri zpracovani pozadavku doslo k vnitrni chybe. Pravdepodobne se jedna o chybu v .htaccess souboru.
Ctete instrukce v nasi znalostni bazi: Chyba 500 - Internal Server Error
Michal Vyšinský
Člen | 608
+
0
-

Wedos má myslím problémy s:

Options -Indexes

Jinak se omlouvám za předchozí blbou radu a pokud je tato také špatná, tak i za ni :)

Draffix
Člen | 146
+
0
-

Tak jsem zkoušel všechny kombinace a vyšlo mi z toho tohle:

Když mám toto:
htaccess globální

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ /www/ [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/www/
    RewriteRule ^(.*)$ /www/$1
    SetEnv NETTE_HTACCESS ok
</IfModule>

Bootstrap:

if (isset($_SERVER['NETTE_HTACCESS'])) { // FastCGI
// Admin base router
    $container->router[] = new Route('admin[/<presenter>[/<action>[/<id>]]]?strana=<paginator-page> ', array(
                'module' => "admin",
                'presenter' => array(
                    Route::VALUE => 'Homepage',
                    Route::FILTER_TABLE => array(
                    ),
                ),
                'action' => array(
                    Route::VALUE => 'default',
                    Route::FILTER_TABLE => array(
                        // řetězec v URL => akce
                    ),
                ),
                'id' => NULL,
            ));
} else {
      $container->router[] = new SimpleRouter('Homepage:default');
}

Tak mi jedou cURL ale nejedou mi odkazy – chyba 500.

Když pak v globálním htaccessu smažu toto: SetEnv NETTE_HTACCESS ok a v bootstrapu podmínku pro $_SERVER['NETTE_HTACCESS'], tak mi zase jedou odkazy ale nejde cURL. Jak to vyřešit? Už mi jde z toho hlava kolem

Editoval Draffix (18. 2. 2013 15:24)

Draffix
Člen | 146
+
0
-

htaccess ve www složce mám takto:

# Apache configuration file (see httpd.apache.org/docs/2.2/mod/quickreference.html)

# disable directory listing
#Options -Indexes

# enable cool URL
<IfModule mod_rewrite.c>
    RewriteEngine On
    # RewriteBase /

    # front controller
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

# enable gzip compression
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>

# allow combined JavaScript & CSS. Inside of script.combined.js you could use <!--#include file="script.js" -->
<IfModule mod_include.c>
    <FilesMatch "\.combined\.(js|css)$">
        #Options +Includes
        #SetOutputFilter INCLUDES
    </FilesMatch>
</IfModule>

A stále to nejde, opravdu nikdo neví?