Symfony I. rész – Symfony 1.3 + propel telepítése ubuntu környezetben
Ide egy symfony 1.3 + Propel project elkészítését szánom. Ubuntu rendszeren dolgozom, azért mert egyszerűbb, mint Windowson. Ha Windowson próbálkoznék, akkor is valamilyen virtuális Linuxot (pl: virtualbox) telepítenék fejlesztői teszt környezetnek.
A symfony 1.3-ra pedig azért esett a választás, mert ez az utolsó verzió, ami kompatibilis az 1.0-val. Rengeteg 1.0-as plugin található, aminek nincs 1.2-1.3-1.4-es verziója. Ha esetleg gyorsan be kell üzemelnem valamelyiket, akkor 1.3 alatt talán könnyebb lesz. A propelt pedig azért választottam, mert a cég, ahol dolgozom ezt használja és ezért én sem használtam még doctrinet.
A projektemnél az adatbázis már kész volt és használták is. Erre fogjuk ráhúzni a symfonyt admin felületét.
Telepítsük a hiányzó szoftvereket:
Az alap rendszer az, hogy a LAMP (Linux-Apache-MySql-PHP) környezet már megvolt.
Ha mégsem, akkor egy már telepített Ubuntu/Debian Linuxon, a sudo apt-get install mysql-server phpmyadmin paranccsal a legegyszerűbb telepíteni, egy mozdulattal mindent 🙂 Utána jöhet a symfony:
[code lang=”bash”]
sudo-s #rendszergazda módba váltunk
apt-get install php-pear
pear channel-discover pear.symfony-project.com
pear install symfony/symfony-1.3.5 #ha van újabb, akkor azt
apt-get install php5-xsl #xsl php kiterjesztés telepítése, a propelhez kell
a2enmod rewrite # mod rewrite
/etc/init.d/apache restart
exit #kilépünk a rendszergazda módból
mkdir sandbox #létrehozzuk a project könyvtárat
cd sandbox #belépünk a könyvtárba
symfony generate:project sandbox –orm=Propel #project készítése
symfony generate:app frontend #alkalmazás létrehozása
# hogy a majdani felület kapja meg az alap symfony designt
ln -s /usr/share/php/data/symfony/web/sf web/sf
[/code]
Ezzel létre is hoztunk egy alkalmazást.
Ami problémával szembesülhetünk hogy valamiért nem lehet újraindítani az apache szervert, mert a 80/443-as portok valamelyike már foglalt. Ez általában az /etc/apache/ports.conf fileban keletkezett duplikált bejegyzés miatt fordulhat elő. Töröljük az egyiket…
Most be kell állítanunk az adatbázist. Ez most több fájlt érint, hiszen alapból az 1.3 már doctrine modeleket használ, ha a projektet nem –orm=Propel direktívával hoztuk létre. Mi azzal tettük 🙂
De ha mégsem, akkor először is szükségünk lesz egy propel.ini fájlra a sandbox/config könyvtárunkban. A fájlt nekünk kell létrehozni az alábbi sorokkal. Értelemszerűen át kell szerkeszteni (host,dbname, password, user, output dir), akkor is ha nem mi hoztuk létre.
[code language=”plain”]
propel.targetPackage = lib.model
propel.packageObjectModel = true
propel.project = sandbox
propel.database = mysql
propel.database.driver = mysql
propel.database.url = mysql:host=localhost;dbname=teszt
propel.database.creole.url = ${propel.database.url}
propel.database.user = felhsznalo
propel.database.password = jelszo
propel.database.encoding = utf8
; mysql options
propel.mysql.tableType = InnoDB
propel.addVendorInfo = true
propel.addGenericAccessors = true
propel.addGenericMutators = true
propel.addTimeStamp = true
propel.addValidators = false
propel.useDateTimeClass = true
propel.defaultTimeStampFormat = Y-m-d H:i:s
propel.defaultTimeFormat = H:i:s
propel.defaultDateFormat = Y-m-d
propel.schema.validate = false
propel.samePhpName = false
propel.disableIdentifierQuoting = false
propel.emulateForeignKeyConstraints = true
; directories
propel.home = .
propel.output.dir = /home/user/sandbox
propel.schema.dir = ${propel.output.dir}/config
propel.conf.dir = ${propel.output.dir}/config
propel.phpconf.dir = ${propel.output.dir}/config
propel.sql.dir = ${propel.output.dir}/data/sql
propel.runtime.conf.file = runtime-conf.xml
propel.php.dir = ${propel.output.dir}
propel.default.schema.basename = schema
propel.datadump.mapper.from = *schema.xml
propel.datadump.mapper.to = *data.xml
; builder settings
propel.builder.peer.class = plugins.sfPropelPlugin.lib.builder.SfPeerBuilder
propel.builder.object.class = plugins.sfPropelPlugin.lib.builder.SfObjectBuilder
propel.builder.objectstub.class = plugins.sfPropelPlugin.lib.builder.SfExtensionObjectBuilder
propel.builder.peerstub.class = plugins.sfPropelPlugin.lib.builder.SfExtensionPeerBuilder
propel.builder.objectmultiextend.class = plugins.sfPropelPlugin.lib.builder.SfMultiExtendObjectBuilder
propel.builder.mapbuilder.class = plugins.sfPropelPlugin.lib.builder.SfMapBuilderBuilder
propel.builder.addIncludes = false
propel.builder.addComments = true
propel.builder.addBehaviors = true
[/code]
a config/database.yml fájlt is átszerkesztjük:
[code language=”plain”]
dev:
propel:
param:
classname: DebugPDO
debug:
realmemoryusage: true
details:
time: { enabled: true }
slow: { enabled: true, threshold: 0.1 }
mem: { enabled: true }
mempeak: { enabled: true }
memdelta: { enabled: true }
test:
propel:
param:
classname: DebugPDO
all:
propel:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: mysql:dbname=teszt;host=localhost
username: user
password: password
encoding: utf8
persistent: true
pooling: true
[/code]
Majd át kell szerkeszteni a config/ProjectConfiguration fájlt is. Engedélyezzük a pluginokat.
[code language=”php”]
public function setup()
{
$this->enableAllPluginsExcept(array(‘sfDoctrinePlugin’));
// vagy : $this->enablePlugins(‘sfPropelPlugin’);
}
[/code]
Ezekután az adatbázisunkhoz legeneraálhatjuk a schema.yml fájlt. Majd abból a modelt, a formot és a filtereket. Majd végül az első modulunkat is (modelname a modelünk – táblánk – neve):
[code lang=”bash”]
# az alábbi paranccsal tudjuk a web könyvtárunkba a szükséges symlinkeket
# létrehozni, amire szintén a design miatt lesz szükség
./symfony plugin:publish-assets
./symfony propel:build-schema #ezzel jön létre a config/schema.yml fájl a beállított adatbázis alapján
./symfony propel:build-model #modelek (táblák) legenerálása
./symfony propel:build-form #formok generálása
./symfony propel:build-filter #a táblázatokhoz tartozó filterek legenerálása
# vagy az előző 3 helyett csak egyszerűen
# ./symfony propel:build-all –classes-only
# most pedig következzen a tábláink admin felületének legenerálása:
./symfony propel:generate-admin frontend modelname #a modul is ezt a nevet kapja
# vagy ha más néven szeretnénk:
#./symfony propel:generate-admin –module="modelnameAdmin" frontend modelname
[/code]
Az utolsó parancsot érdemes az összes modulunkra (értsd: tábla) lefuttatni.
Én két problémába ütköztem, ezen parncsok futtatásakor.
- A propel nem szereti a default értékként beállított CURRENT_TIMESTAMP-et, viszont a schema.yml-be beírja. Ezért át kellett szerkesztenem a generált fájlban: defaultValue: ‘0000-00-00 00:00:00’.
Ráadásul a hibaüzenet is nagyon buta volt:Szegmens hiba. Na ebből találja ki az ember 🙁 - A másik probléma pedig az volt, hogy szerettem volna egyben lefuttatni a model, form, filter építő parancsokat, de elfogyott a memória. Nem tudom melyik memória volt kevés, mert a php.ini-ben a négyszeresére emeltem, de még mindig ugyanannyira kevés volt. De legalább a hibaüzenet és az utasítások érthetők voltak
Zárjuk le egyszerűen a telepítésünket:
Lehetne szenvedni az apache virtuális könyvtáraival, de az egy másik leírás lesz. 🙂
Most egy egyszerű Linux link is megteszi nekünk. Tehát létre kell hozni a /var/www könyvtárban egy linket a projectünknek. Ehhez el lehetne mélyednünk az ln parancs használatában, de én mindig a midnight commandert használtam ehhez. Ha nem lenne feltelepítve, akkor a sudo apt-get install mc paranccsal telepíthetjük. A két ablakos rendszerben a CTRL+X, majd utána S gomb lenyomásával hozhatunk létre linket. Hozzuk hát létre a /var/www könyvtárban egy linket sandbox néven, ami a sandbox/web könyvtárunkra mutat. És a máris elérhető a táblázatunk a http://mydomain/sandbox/index.php/modul url alatt. Ehhez lehet rendszergazdai módba kell váltanunk.
Ha el akarjuk hagyni az index.php -t az URL-ből, akkor az /etc/apache/sites-available/default fájlt kell módosítani. A “Directory” szegmens alatt az AllowOverride None sort módosítani kell AllowOverride All -ra. Ezzel engedélyezzük a .htaccess fájlok használatát. Így a http://mydomain/sandbox/index.php/modul helyett használhatjuk simán a http://mydomain/sandbox/modul URL-t is.
Illetve ha valami hibába ütköznénk, akkor a fehér képernyő helyett a http://mydomain/sandbox/frontend_dev.php/modul alatt informálódhatunk a problémáról. Ha nem localhoston dolgozunk, akkor a frontend_dev.php fájl elején engedélyeznünk kell a saját IP címünket is.
február 26th, 2010 at 15:51
./symfony propel:build-schema #ezzel jön létre a config/schema.yml fájl
idáig eljutottam, nagyon köszönöm ezt a hasznos leírást!
Viszont ha ezt beírom a terminálba, akkor ezt a hibaüzenetet kapom:
Unable to parse file “/home/hatasu/sandbox/config/databases.yml”: A YAML file cannot contain tabs as indentation at line 5 ( propel:).
Mitől lehet ez és hogyan küszöbölhetem ki?
február 26th, 2010 at 17:30
Azt írja, hogy egy tabulátor került bele. Ezt kell valahogy megkeresned. A yml nem szereti a tabulátort, helyette 2 space kell.
március 1st, 2010 at 16:57
Hello!
Én is a végénél akadtam el. Beírom hogy “./symfony propel:build-schema” tölt egy másodpercet és mintha mi sem történt volna, visszaáll. Beírva a következő sort, kiírja, hogy “You must create a schema.yml or schema.xml file.” és tényleg nem hozta létre a config mappában. Viszont a config/doctrine-ban találtam egy schema.yml fájlt.
Mi lehet a probléma?
Köszi a segítséget: Csaba
március 1st, 2010 at 19:44
Az adatbázisodban van valami, vagy üres? Kellene lenni benne legalább egy táblának és nekem az a gyanúm, hogy a tiédben nincs.
Ez a leírás pedig egy már meglévő adatbázisból dolgozna és arra építene rá egy adminisztrátori felületet.
június 8th, 2010 at 07:23
[…] mennék az első rész folyamányaként. Admin generátorról lesz itt is szó, néhány általános probléma […]
február 15th, 2011 at 19:02
[…] is az első leírásban létrehozott sandbox projektünket fogjuk […]