Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Beheren van configuraties in een webapplicatie

Pagina: 1
Acties:

  • Struikrover
  • Registratie: Juni 2005
  • Laatst online: 15:08
Hallo Tweakers, ik zit met een voor mij moeilijk oplosbaar probleem. Hopelijk kunnen jullie mij helpen een routine te ontwikkelen die voor mij werkt.

Ik heb in Symfony2 een soort CMS ontworpen voor een kleine website, met sterke nadruk op het faciliteren van handigheidjes voor de doelgroep: een druk-op-de-knop contactformulier, producten aanbieden met categorieen en filterfuncties, zoekmachine-optimalisatie, social media integratie, etcetera. Allemaal leuk en zo, maar nu zit ik met het volgende probleem:

Voor iedere potientiele gebruiker van de applicatie heb ik een andere set configuratie- en layoutbestanden nodig. Steeds zijn dit dezelfde bestanden in dezelfde locaties: een default configuratie voor componenten, parameters voor bijvoorbeeld de database, en een aantal publieke files (css en afbeeldingen).

Ik zal zo'n set bestanden voor het gemak even definieren als een installatie.

Wat ik wil, is gemakkelijk kunnen wisselen tussen installaties bij het doorontwikkelen van mijn applicatie en tevens bij het ontwikkelen van een nieuwe installatie voor een nieuwe klant.
Ik moet dus een scheiding aanbrengen tussen de bestanden van mijn applicatie die voor iedere installatie gelijk zijn, en de bestanden die per installatie verschillen, om het gemakkelijk te maken te wisselen.

Hoe ik de scheiding aanmaak is me duidelijk: in de applicatie repository moet ik de betreffende bestanden negeren in .gitignore.
Hoe ik verschillende installaties beheer weet ik nog niet helemaal. Ik heb naar Capifony gekeken, maar dat is meer een tool voor deployment naar een remote server, en ik wil juist op mijn eigen server kunnen wisselen.

Een idee zou kunnen zijn om een tweede git repository bij te houden met alleen die bestanden, en dan voor iedere installatie een branch bij te houden die je kunt uitchecken. Het probleem daarmee is alleen dat je volgens mij niet meerdere repositories op dezelfde root folder kunt hebben, en aangezien mijn bestanden verspreid staan over de hele installatie is dat wel nodig.

Kortom, ik heb geen idee meer wat ik het beste kan doen. Enig advies zou erg op prijs gesteld worden :)

  • Flard
  • Registratie: Februari 2001
  • Laatst online: 23-11 21:41
Aangezien je met Symfony2 werkt, lijkt me dit een uitgelezen kans om met de bundles te werken: je kunt een aparte bundle maken waarin al je gedeelde functionaliteit zit. Eventueel meerdere bundles, zodat je je "DrukOpDeKnopContactFormulierBundle" (;-)) alleen hoeft te laden indien nodig.
Als je zorgt dat al deze bundles een goede standaardconfiguratie hebben, hoef je deze nog alleen maar te overriden per applicatie.

Vervolgens zorgt je ervoor dat je elk van deze bundles in een eigen git repository zet, zoals je al in je eigen topicstart aangeeft.. Deze kun je dan deze via git submodules "includen" in je /src map. (zie daarvoor het commando git submodule add.

Als je het écht mooi wil maken kun je ook uitzoeken hoe je ze via Composer kunt inladen. ;-)

  • Struikrover
  • Registratie: Juni 2005
  • Laatst online: 15:08
Oke, even een voorbeeld van de structuur van de applicatie, en waar de voor dit probleem belangrijke bestanden zich bevinden:

/
- app/
   - config/
      - config.yml     <- verschilt per installatie
      - parameters.ini     <- verschilt per installatie
- src/
   - BundleNamespace/ (deze heet anders in het echt)
      - WebsiteBundle/
         - Resources/
            - public/
               - css/     <- deze verschilt per installatie
               - images     <- deze verschilt per installatie


Ik zal er nog een aantal vergeten zijn. Maar goed, waar het op neer komt, is dat ik dus binnenin mijn bundle en in de eigen app folder van Symfony2 bestanden heb die ik per installatie anders wil hebben. Deze kan ik dus zelf niet weer in een bundle stoppen tenzij ik er symlinks in plaats.

Het kan ook goed zijn dat mijn werkwijze verkeerd is, maar dan hoor ik dat ook graag. Op deze manier kan ik niet verder en dat wil ik wel graag.

  • jeroenikke
  • Registratie: Augustus 2003
  • Laatst online: 23-11 09:36
Ik denk dat Flard gelijk heeft: 1 globale Bundle maken, de andere 'installaties' krijgen dan een aparte Bundle die overerft van de globale Bundle. Elke Bundle heeft ook zijn eigen config.yml (Resources/config), die de globale config override. Je kan ook je eigen parameters.ini maken, dan moet je gewoon bovenaan de config.yml
code:
1
2
imports:
    - { resource: parameters.ini }

zetten.

Interessante lectuur:
http://symfony.com/doc/cu.../bundles/inheritance.html
http://symfony.com/doc/cu...es-routing-validation-etc
http://symfony.com/doc/cu...ml#services-configuration

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 10-10 08:02
Ik zou voor inspiratie eens kijken naar https://github.com/liip/LiipThemeBundle Dit gaat wel uit van een theme in je bundle, maar in principe kun je dit ook aan aanpassen naar een /theme folder in je applicatie. En mocht je meerdere sites onder 1 symfony installatie willen gebruken, kun je natuurlijk attijd meerdere kernels/environments met een eigen configuratie aanmaken.

Driving a cadillac in a fool's parade.