Jak si řešíte na localhostu více projektů (přepínání mezi nimi?)

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

Když vyvíjíte, jak rozlišujete jednotlivé projekty na localhostu. V poslední době jsem se setkal s tím, že hodně programátorů používá http://localhost/nazev_projektu/ , ale to mi přijde hodně nepraktické.
Přinejmenším už proto, že na svých projektech ze statického CSS volám soubory /img/obrazek.jpg a takhle bych musel navíc CSS (před)generovat v cestami /nazev_projektu/img/obrazek.jpg (volat jej ../../img/obrazek.jpg nepřípadá v úvahu).

Já mám svůj systém už vyřešený, ale zarazilo mě, co jsem v posledních dnech viděl a tak se na to teď ptám, protože výše uvedený příklad požívá zjevně více lidí, než jsem očekával.

Filip Procházka
Moderator | 4668
+
0
-

apache má krásnou vychytávku, která se jmenuje virtualHost… já používám vzorovej configurák:

<VirtualHost 127.0.0.1:*>
        ServerName kdyby.loc
        ServerAlias *.kdyby.loc
        ServerAdmin HosipLan@gmail.com
        DocumentRoot /var/www/xampp/kdyby.org
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/xampp/kdyby.org>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

kterej duplikuju a upravuju v složce sites-available a házím symlinky do sites-enabled, nevím jak přesně to je na win, ale počítám že nějak hodně podobně.
Všechno samozřejmě musíš nějakým způsobem tahat do httpd.conf ale počítám že už to v tom configu bude přednastavené :)

Další krok je nastavit domény na úrovni systému, myslím že jsem slyšel o nějakém programu na win, něco jako lokální-dns-server, na linuxu si tu v pohodě přiřadím k doménám ip 127.0.0.1, určitě rychle příjdeš nato jak to nastavit u sebe.

Editoval HosipLan (15. 10. 2009 21:56)

Ondřej Brejla
Člen | 746
+
0
-

VirtualHosty

EDIT: hm…pomale HTC :-) btw na win taky existuje v systemu hosts file (z hlavy nevim kde a nemam se kde podivat :/ ), kde si ty adresy nastavis v textaku a neni potreba zadny externi program.

Editoval Warden (15. 10. 2009 22:05)

Matúš Matula
Člen | 257
+
0
-

Na win mi to ide takto:

v subore c:\WINDOWS\system32\drivers\etc\hosts si nadefinujes subdomenu na localhost

napr test:

127.0.0.1        localhost
127.0.0.2        test.localhost

a v apache si nakonfigurujes spracovanie tej adresy (tiche presmerovanie do adresara x)

do suboru httpd.conf [u mna tu: c:\wamp\Apache2\conf\] mozes dat v podstate to, co napisal HosipLan, ale vystacis si s tymto:

<VirtualHost test.localhost:80>
    DocumentRoot "C:/web/test"
    ServerName test.localhost
</VirtualHost>

Editoval Matúš Matula (15. 10. 2009 22:24)

Michalek
Člen | 210
+
0
-

Dělám to stejně jako v příspěvku o jedno výše, názvy projektů neřeším jako „test.localhost“ ale jako „example_com“ když originál je na „example.com“.

Ondřej Mirtes
Člen | 1536
+
0
-

Přesně tak, VirtualHosts. I když vlastně není adresa bez podsložky potřeba, je to takové příjemnější (používám adresu ve tvaru http://projekt.local/).

K cestám obrázků a CSS souborů: adresa začínající / je absolutní, adresa bez / je relativní. A musíš to správně nalinkovat jen v HTML, pak v CSSku už stačí mít cesty k obrázkům relativně od daného CSS souboru, tam už adresu, kde projekt běží, řešit vůbec nemusíš.

(V době krásných URL je potřeba používat jen ty absolutní cesty, to je snad jasné :))

A k uvedení správné cesty pro CSS a obrázky v HTML slouží v Nette proměnná {$baseUri} (a pár revizí nazpět byla přidána i {$basePath}, která nemá tuším konečné lomítko), takže sám nic generovat nemusíš. Pokud je projekt v rootu, bude ta proměnná obsahovat /, pokud je v nějaké podsložce, obsahuje /podslozka/. Zápis v HTML pak vypadá takto:

<img src="{$baseUri}images/image.jpg" .... />
Klokan
Člen | 47
+
0
-

Já používám systém adresářů jak bylo psáno v prvním příspěvku, tj. localhost/projekt. V kombinaci s {baseUrl} není potřeba nic řešit, vše mi funguje bez problémů.

Jod
Člen | 701
+
0
-

Virtual hosty (http://projekt/) + systém adresárov. Nechce sa mi na všetko robiť virtualhosty.

Cifro
Člen | 245
+
0
-

Ja na windowsackom localhoste si simulujem prostredie ake ja na hostingu, t.j. adresarovu strukturu.

domena.com/
   |-- sub/
   |     |-- test/
   |     |     |-- index.php
   |     |-- develop/
   |-- web/
   |     |-- index.php
   |-- data/
   |-- logs/
   |-- atd...

V hosts subore mam:

#namiesto .com, .sk pouzivam .local
127.0.0.1 domena.local
127.0.0.1 test.domena.local
127.0.0.1 develop.domena.local

vhost.conf:

<VirtualHost 127.0.0.1>
    DocumentRoot "...../www/domena.com/web"
    ServerName domena.local
</VirtualHost>

<VirtualHost 127.0.0.1>
    DocumentRoot "...../www/domena.com/sub/test"
    ServerName test.domena.local
</VirtualHost>

Kedysi som sa pokusal rozchodit aj nejaky simple dns server na localhoste aby som si mohol zadat napr. *.domena.local a ne vsetky subdomeny vypisovat rucne do hosts, ale nepodarilo sa mi to.

Honza Kuchař
Člen | 1662
+
0
-

Hmm, já mám adresu trochu delší :) Mám tam celý SVN :)

http://localhost/00_Vyvoj/Projekty/source/PHP/document_root/

Jakub Bouček
Člen | 54
+
0
-

Díky za odpovědi.

V podstatě požívám způsoby, které jste uvedli, tedy http://nazevprojektu.localhost/ a to pomocí VirtualHostu a hosts souboru.

Klokan napsal:

Já používám systém adresářů jak bylo psáno v prvním příspěvku, tj. localhost/projekt. V kombinaci s {baseUrl} není potřeba nic řešit, vše mi funguje bez problémů.

A jak řešíš volání statických souborů jako CSS? Nebo to všechno generuješ? A nebo nijak neroutuješ do CoolUri.

honzakuchar napsal:

Hmm, já mám adresu trochu delší :) Mám tam celý SVN :)
http://localhost/…cument_root/

Wow, to vypadá šíleně. Neumím si představi tímto způsobem řešit dva a více projektů. No, jak potom řešíš větvení v SVN, teda pokud ho využíváš?

Snad ještě dodám, že v konfiguraci hostů v Apache jsou jednotlivé projekty v samostatných souborech, které jsou do hlavního configuračního souboru includovány něčím jako Include conf/hosts/*.conf. Abych si ušetřil práci, na http://localhost/ script rozparsuje configuráky a vytahá z nich seznam všech hostů na serveru.

Editoval bukaJ (17. 10. 2009 20:47)

Nich
Člen | 49
+
0
-

Tak jsem se snažil taky vytvořit svůj server, ale nějak se mi to nedaří…

Mám tuhle strukturu:

C:\Framework\localhost\
-----------------------> \www\first\index.html
-----------------------> \prog\Apache2

První co jsem udělal je, že jsem nainstaloval Apache do složky Apache2.
Potom jsem v souboru „C:\Windows\System32\drivers\etc\hosts\host“ odkomentoval ten localhost řáděk… takže tam mám:

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost

A pak jsem v souboru „C:\Framework\localhost\prog\Apache2\conf\httpd.txt“ dopsal tuhle část:

<VirtualHost localhost:80>
    DocumentRoot "C:/Framework/localhost/www/"
    ServerName localhost
</VirtualHost>

No, ale když do prohlížeče napíšu: „http://localhost/first/index.html“ , tak na mě křičí

Not Found

The requested URL /first/index.html was not found on this server.

Vůbec nevím co jsem udělal špatně :-\

Patrik Votoček
Člen | 2221
+
0
-

koukni do logu

Nich
Člen | 49
+
0
-

vrtak-cz napsal(a):

koukni do logu

Tak sem si s tím ještě trošku pohrál, ale marně… a hlásí mi to:

Forbidden

You don't have permission to access /first/index.html on this server.

A v logu mám tohle:

[Thu Jun 17 04:27:35 2010] [error] [client 127.0.0.1] client denied by server configuration: C:/Framework/localhost/www/first/index.html

Přidal jsem do „hhtpd“ i tohle nastavení, ale taky nepomohlo:

<Directory "C:/Framework/localhost/www/">
  Options FollowSymLinks
  AllowOverride All
  Order deny,allow
  Deny from all
</Directory>
Panda
Člen | 569
+
0
-

Nich napsal(a):

Přidal jsem do „hhtpd“ i tohle nastavení, ale taky nepomohlo:

<Directory "C:/Framework/localhost/www/">
  Options FollowSymLinks
  AllowOverride All
  Order deny,allow
  Deny from all
</Directory>

To Deny from all tam přímo bije do očí. :-)

<Directory "C:/Framework/localhost/www/">
  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>
repli2dev
Člen | 57
+
0
-

Pokud vadí potřeba definovat každý VirtualHost zvlášt, lze to eliminovat za použitím 1. Virtualhostu, subdomén a vmod_alias modulu:

<VirtualHost *:80>
        ServerName localhost
        ServerAlias *.localhost

        DocumentRoot /cesta/k/rootu/%1

# Rewrite rule due the problem with missing www
RewriteEngine on
# domain.tld -> www.domain.tld
RewriteCond %{HTTP_HOST}  ^([^.]+)\.([^.]+)$
RewriteRule ^(.*)$  http://www.%{HTTP_HOST}$1 [L,R=301,QSA]
# www.neco.domain.tld -> neco.domain.tld
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteRule ^(.*)$ http://%1.%2.%3$1 [L,R=301,QSA]

</VirtualHost>

To %1 zařídí, že:
www.localhost se bude hledat v /cesta/k/rootu/www
neco.localhost se bude hledat v /cesta/k/rootu/neco

V souboru hosts tedy musí být pro každou adresu z nich zápis, v DNS stačí v CNAME *.

Nich
Člen | 49
+
0
-

Panda napsal(a):

Nich napsal(a):

Přidal jsem do „hhtpd“ i tohle nastavení, ale taky nepomohlo:

<Directory "C:/Framework/localhost/www/">
  Options FollowSymLinks
  AllowOverride All
  Order deny,allow
  Deny from all
</Directory>

To Deny from all tam přímo bije do očí. :-)

<Directory "C:/Framework/localhost/www/">
  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

No tak sem to upravil ale pořád jsem Forbidden :-(

repli2dev: to s tím DNS nějak nechápu :D

EDIT: v logu mám jinak pořád to samé

[Thu Jun 17 10:43:08 2010] [error] [client 127.0.0.1] client denied by server configuration: C:/Framework/localhost/www/first/index.html

Tady je kdyžtak k nadlédnutí celej ten můj Apache httpd.cof

Editoval Nich (17. 6. 2010 10:53)

Nich
Člen | 49
+
0
-

Tak sem všecko zkusil ještě jednou, ale tentokrát podle tohodle návodu

a už všecko frčí (;

newPOPE
Člen | 648
+
0
-

Ja vytvaranie virtualhostov nemam rad takze to pouzivam len ked musim (v praci :-D), inak si myslim ze s tym nejaky problem nie je kedze NETTE automaticky detekuje hlbku… staci pouzivat {$basePath}, este mam ine riesenie a to nastavit v .htaccess

RewriteRule /school/timak ;-)