Archive for the 'CakePHP' Category

mod_rewrite neuvoja

Tere vaan kaikille,

Ne, jotka olivat keskiviikon 5.3. luennolla kuulivat muutamista ongelmista, jotka liittyvät esimerkiksi CakePHP:n, symfony:n ja muiden, ainakin PHP-kielisten sovelluskehysten käyttöönotton ensiaskeliin.

Ongelma

Ongelma ilmenee siten, että kehittäjä saa 404 vastauksen, vaikka yrittää kuinka kirjoittaa URL:in. Esivaatimuksena tähän on omien kokemuksieni perusteella se, että yrittää käyttää sovelluskehystä kotihakemistonsa public_html hakemistosta, eikä omalta virtuaalipalvelimelta tai palvelimen juuresta (esim. /var/www/).

Syy tähän löytyy siitä, että useimmat sovelluskehykset olettavat, että niitä käytetään (virtuaali)palvelimen juuresta. Ongelma on kuitenkin ainakin CakePHP 1.1 ja 1.2 sekä symfonyn kanssa nopeasti ratkaistavissa.

Ratkaisu

Kun olet purkanut valitsemasi sovelluskehyksen paketin esimerkiksi hakemistoon $HOME/public_html/projekti, avaa kyseisen hakemiston juuresta löytyvä .htaccess tiedosto jollain tekstieditorilla.

CakePHP 1.1.* tapauksessa sieltä löytyy seuraavaa:

1 <IfModule mod_rewrite.c>
2    RewriteEngine on
3    RewriteRule    ^$ app/webroot/    [L]
4    RewriteRule    (.*) app/webroot/$1 [L]
5 </IfModule>

Lisää rivin kaksi jälkeen rivi:

ReWriteBase /~<käyttäjätunnuksesi>/projekti

Joka kertoo mod_rewrite enginelle että kaikkia tämän hakemistorakenteen alle tehtäviä URL:ja muokattaessa on lisättävä alkuun tämä URL. Huomatkaa että parametri alkaa kenoviivalla (”/”).

Jos unohdat kenoviivan alusta, saat todennäköisimmin 500 Internal server errorin, joka tulee mod_rewriteltä.

Täysin sama “kikka” (ei oikeastaan, vaan täysin dokumentoitu ominaisuus) toimii melko varmasti muidenkin sovelluskehysten kanssa.

Ei toimi vieläkään?

Mikäli ongelmat jatkuu, etsi käsiisi käyttämäsi http-palvelimen virheloki.

Ainakin apache2:sen tapauksessa vakioasetuksena taitaa olla /var/log/apache2/error.log ja sieltä tarkistaa joko viimeiseltä riviltä tai jaetulla koneella viimeiseltä riviltä, jonka sinun kone on sinne aiheuttanut (cat error.log | grep <oma-ip-osoitteeni> | tail).

Logiriviltä voit päätellä tiedoston/hakemiston jota apache oikeasti yrittää hakea. Mikäli et pääse käsiksi palvelimen error.logeihin niin yritä saada mod_rewriten oma loggaustoiminto toimimaan.

Lisäksi kannattaa varmaan kommenttia pistää tähän blogimerkintään ja korjataan/laajennetaan tätä tekstiä sitä mukaan kun ratkaisuja keksitään! Älkää pastetko mitään pitkiä virheilmoituksia vaan käyttäkää pastebin -tyylisiä ratkaisuja.

Koodiklinikka: PHP-sovelluskehykset

Koodiklinikalla katselmoidaan kaksi PHP-sovelluskehystä, CodeIgniter ja CakePHP.

Linkkejä ja lisätietoa:

Vuonna 2007 osa Hypermedian ohjelmoinnin suorittajista käytti CakePHP-kehystä harjoitustyön toteuttamiseen. Palaute oli pääosin negatiivista: automatisoitu pysyvän tietosisällön hallintakerros osoittautui haasteelliseksi ymmärrettäväksi. URI-tunnisteiden uudelleenkirjoitus ei toiminut halutulla tavalla. Myös kehyksen dokumentaatio todettiin puutteelliseksi. Näyttäisi siltä, että etenkin aloitteleva PHP-soveltaja kohtaa väistämättä ongelmia CakePHP-kehyksen kanssa.