F3llony Posted February 3, 2016 Report Share Posted February 3, 2016 Ka symfony menedžē environment konfigurāciju? Teiksim, dev`am vajag braintree sandbox key'us. Ar flagiem un konfigurācijas failiem. Realitātē, izskatās apmēram tā: > config.yml >> config_dev.yml >> config_test.yml >> config_prod.yml > parameters.yml >> parameters_dev.yml >> parameters_test.yml >> parameters_prod.yml Būtībā, visi {config|parameters}_{dev|test|prod} faili "extends" no {config|parameters}.yml. Var definēt kādas un cik vien vēlies vides. Reizēm piemēram _test extends no _dev, kas extends no _prod utt utjp. Konfigurācijām no environment variabļiem ir iespēja injicēt konteinerī parametrus ar prefiksiem. Tavi keji vispirms tiktu definēti parameters_prod.yml (produkcijai), pēc tam _prod tiktu iekļauts _dev un tur vari definēt dev keys. Quote Link to comment Share on other sites More sharing options...
briedis Posted February 3, 2016 Report Share Posted February 3, 2016 Tie config faili atrodas versiju kontrolē? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 3, 2016 Report Share Posted February 3, 2016 Protams, ka nē. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 3, 2016 Report Share Posted February 3, 2016 Izņemot to configu no kura citi manto. Sensible defaults. Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 3, 2016 Report Share Posted February 3, 2016 (edited) Tie config faili atrodas versiju kontrolē? Normālā gadījumā visi faili no konfiga ir versiju kontrolē kaut kādā formā, dev un test parasti satur "sensible defaults" ko minēja daGrevis, lai arī tā pat faili atrodas VC, jo freima izpratnē konkrētajā env citi config izņemot tos, kas paredzēti dotajai env un tie, kurus dotās env konfigs ielādē, neeksistē. Var jau arī būt _dev.yml kas vienkārši ielādē _prod.yml. Prodā tomēr ir nedaudz savādāk, visbiežāk viens no šiem 3 variantiem: 1. parameters_prod.yml.dist ar "sensible defaults" un bez, piemēram, DB konekciju info atrodas VC un parameters.yml ir gitignorē. Produkcijā parameters.yml atrodas kaut kur failu sistēmā, pie deployment simlinko uz /app/config. Devā ielinko un aizpilda manuāli, vai ielinko ar composer tasku/git hūku, vai arī izmanto https://github.com/Incenteev/ParameterHandler. Šādā veidā tev ir gan atskaites punkts VC un nedaudz privātuma. Mīnuss šeit ir turēt gan .dist gan produkciju "on the same page", lai gan tam lieliski der konfiga menedžeri utml tūļi. 2. parameters.yml ir VC vienmēr. Parametru vērtības tiek saņemtas no ENV. ENV menedžē ar tūli (puppet, cap, ansible, whatever). Mans personiskais favorite. 3. parameters.yml ir VC ar visām parolēm. Dens Kaminskis berzē rokas. Un vēl viena nianse. config.yml ir paredzēts konfigurācijai kā servisi un servisu linkošana, kā arī konfigurē kādi parametri kur kādam servisam padodami. parameters.yml pamatā satur 1 līdz N dimensionālu masīvu ar skalārām vērtībām, kas ir konfigurācijas mainīgie - DB hosti, paroles, keyi, utt utjp. Labā prakse ir nebāzt abus kopā. Edited February 3, 2016 by F3llony Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted February 3, 2016 Report Share Posted February 3, 2016 Jūs te sarakstījuši esat tā, ka aizraujas elpa lasot. Diezgan interesanti, bet... Manuprāt, tas viss ir diezgan specifiskas detaļas, kuras ir jāanalizē jau ir PĒC tam, kad FW ir izvēlēts. Visu to pašu varēja arī ZF 1. versijā izdarīt, ne 1:1, kā te aprakstīts, bet ļoti līdzīgi. Un citur, kur, kur ir pārdomāta konfigurācijas organizēšana. T.i., pēdējo lapu diskusija ir nevis par to, kāpēc būtu jāizvēlas konkrētais FW, bet dažādas tehnikas, ko katrs pēc vajadzības piekopj. Protams, katrs, kurš seko līdzi, paņem kaut ko sev, bet es nedomāju, ka citiem FW ir būtiski ierobežota šī iespēja konfigurācijām. Pašsaprotami, piemēram, ka viss, kas nav PHP, tiek ģenerēts un kešots, gan templeiti, gan konfigi ne-PHP sintaksēs. Utml. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 3, 2016 Report Share Posted February 3, 2016 (edited) @F3llony - symfony 3 defaultā parameters.yml ietilpst .gitignore sarakstā: https://github.com/symfony/symfony-standard/blob/master/.gitignore#L1 Un vēl: app: resource: "@AppBundle/Controller/" type: annotation class DefaultController extends Controller { /** * @Route("/{_locale}/", name="home", defaults={"_locale"="en"}, requirements={"_locale"="en|ru|lv"}) */ public function indexAction() { return $this->render('default/index.html.twig'); } } php bin/console debug:router -------------------------- -------- -------- ------ ----------------------------------- Name Method Scheme Host Path -------------------------- -------- -------- ------ ----------------------------------- _wdt ANY ANY ANY /_wdt/{token} _profiler_home ANY ANY ANY /_profiler/ _profiler_search ANY ANY ANY /_profiler/search _profiler_search_bar ANY ANY ANY /_profiler/search_bar _profiler_info ANY ANY ANY /_profiler/info/{about} _profiler_phpinfo ANY ANY ANY /_profiler/phpinfo _profiler_search_results ANY ANY ANY /_profiler/{token}/search/results _profiler ANY ANY ANY /_profiler/{token} _profiler_router ANY ANY ANY /_profiler/{token}/router _profiler_exception ANY ANY ANY /_profiler/{token}/exception _profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css _twig_error_test ANY ANY ANY /_error/{code}.{_format} home ANY ANY ANY /{_locale}/ -------------------------- -------- -------- ------ ----------------------------------- php bin/console server:run http://127.0.0.1:8000/ -> No route found for "GET /" 404 Not Found - NotFoundHttpExceptionNav man līkas rokas.Un ignorē uz doto brīdi anotācijas, tas nav svarīgi, svarīgi ir pats fakts, ka norādot default _locale, tas vienalga ir obligāts. Es pieļauju, ka Symfony developeri kaut ko ir sačakarējuši, gadās. Edited February 3, 2016 by jurchiks Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 3, 2016 Report Share Posted February 3, 2016 Es zinu, ka .gitignore jo tas ir defaultais mehanisms. So? Par to otro daļu, piedod bet... > cat app/config/routing.yml app: resource: "@AppBundle/Controller/" type: annotation >cat src/AppBundle/Controller/DefaultController.php <?php namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class DefaultController extends Controller { /** * @Route("/{_locale}", name="homepage", defaults={"_locale"="lv"}, requirements={"_locale"="en|ru|lv"}) */ public function indexAction(Request $request) { return new Response($request->getLocale()); } } > bin/console server:start [OK] Web server listening on http://127.0.0.1:8000 >curl http://localhost:8000 lv >curl http://localhost:8000/en en Ja nu tev tik ļoti kāro to trailing slashu arī (nez kādu iemeslu dēļ): @Route("/{_locale}{slash}", name="homepage", defaults={"_locale"="lv", "slash"="/"}, requirements={"_locale"="en|ru|lv", "slash"="[/]{0,1}"}) Quote Link to comment Share on other sites More sharing options...
Kavacky Posted February 3, 2016 Report Share Posted February 3, 2016 Un tad vēl ir tādi brīnumi kā šis epic. Because fuck you and fuck your API stability. :D Un tādu ir vēl - tur visādi dīvaini versiju bumpi, pēkšņi kaut kur pazūd vai mainās publiskas API daļas, kaut kādas klases pēkšņi pārvācas velns zina kur etc. Doctrine piemēram tieši pieder pie tām lietām, kas ir obviously laba un pie kuras jāpierod. Savukārt Eloquenta Modelī ar 3000+ sloc es gan neko labu īsti nesaskatu. Par to, ka value object entitijas vietā katra entitija ir full blown query buildereris es nekomentēšu... Par apakšistēmām - kam tev dependency menedžeris? Standard issue freimworkam ir jābūt vaniļai, nav jāsatur visa iespējamā tufta ko nu kāds kaut kur varētu izmantot - tā vietā ir jānodrošina iespēja to pielikt klāt pie nepiciešamības, bez sviedriem un asarām. No kā tad, tavuprāt, FW ir jāsastāv? Vaniļa ir pliks PHP, manuprāt, bet no FW es tieši sagaidu, ka tur pilnīgi visas common/basic darbības, ko man varētu ienākt prātā veikt, jau ir atrisinātas. Kamēr viss strādā, kā man vajag, un nav jālien iekšā, man pa lielam ir pie kājas, cik tur rindiņas vai cik smuks kods. Principā vienīgo argumentu pret Laravel es te atzīstu čaļa sievišķīgo garastāvokli un ar to saistītās, bezjēdzīgās izmaiņas. Major versijas, tas būtu skaidrs, bet kāda hrena pēc pat minor ir tādas, ka atšķiras praktiski viss, izņemot nosaukumu - tas gan nav un nevar būt skaidrs. Pirmo reizi Laravel es iemēģināju 5.0, jo mērķa hostinga īpatnības, ok, pabeidzu un pēc pāris dienām sāku citu projektu uz 5.1. Un WTF, praktiski viss ir jādara citādi. Kā var izturēt, ja tev ir projekts, kas n reizes gadā jāpārtaisa, es nezinu. Man zajebal vēlreiz taisīt to, kas jau ir lieliski darba kārtībā, pat, ja par to maksā. Es vienkārši atstātu to versiju, uz kuras sākts, pārējais pohuj. :D Ja tas ir kaut kāds brokastu recepšu blogs, tad vēl tā, bet, ja tev ir normāla apjoma projekts... Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 3, 2016 Report Share Posted February 3, 2016 Man domāt FW vajag konteineri or kko tamlīdzīgu, konfigurācijas menedžmentu, common cache, veidu kā organizēt requests/responses un veidu kā 1-3 sekundēs piekabināt projektam vajadzīgos moduļus. Viss. Un tad tu vari izvēlēties, šito queue, to ORM, šito IMAP klientu, to adapteri, šito librariju. Savādāk sanāk milzīgs blobs ar visu iespējamo figņu ko kādam jebkad varētu vajadzēt. Un kā tu izvēlies ko tur īsti iekļaut tad? Kādam RabitMQ, kādam ASQS, kādam iron.io, vēl kādam phive-queue. Now which one? Man tīk Doktrīne, kādam tīk Propels, vēl kādam tīk idiorms/paris. Tad vēl atnāk kāds un pasaka, man lūdzu Handlebars. Tiesa, ir lietas kas arī symfony ir standarta distribucijā, bet, jamas var nokabināt viena faila ietvaros. Tiem fw kam ir dziļas integrācijas ar kaut kādiem noteiktiem instrumentiem, oioi. Quote Link to comment Share on other sites More sharing options...
Kasspars Posted February 3, 2016 Report Share Posted February 3, 2016 Ja kaut kas ir sarežģīti uztaisīts, tad tas nav pareizi uztaisīts. Es par tiem symfony yml configiem. Pats esmu pietiekami čakarējies ar tiem jau kopš 2008. gada, lai saprastu, ka tas ir "overenginering" Tās API braking changes par ko sašūt F3llony. Jūs apskatījāties kādas ir tās izmaiņas? Šī te metode ir izmesta ārā public function getRemote($path) { return file_get_contents($path); } Te drīzāk ir jautājums pašiem programmētājiem. Kāpēc izmantot getRemote nevis file_get_contents? Tāpēc, ka pa tiešo izsaukt php funkciju nav stilīgi? Laravel Cashier Phantom - phantom vajadzīgs, lai uzģenerētu pdf no html, tāpēc tas velkas līdzi. Nepatīk Cashier, raksti savu, kur problēma? "continuous integration" un "rolling release" - Tavi 100 developeri vendorus nekad neapdeito? Un par jaunākajām vendoru versijām uzzini tikai, kad produkcijas serveri tiek noapdeitoti? Ko tu darītu ja Laravel 5.2 būt pēdējā versija? Projekts apstātos vai rakstītu Otwelam, lai turpina izstrādi? Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 3, 2016 Report Share Posted February 3, 2016 Nu tas, ka tu 8 gadu laikā neesi spējis iebraukt kā darbojas viena freimworka konfigurācija nenorāda uz overengineering, tas norāda, ka tev nav lemts. Vispār. Neko. Nekad. Symfony YML configi sastāv no 3 "konceptiem": parametri, servisi, routes. Visbiežāk lietotās lietas ir tik nenormāli tupi elementāras, ka šekspīru rakstošie mērkaķi validus servisu konteinerus gan jau ir kādas reizes 5 sarakstījuši. Tas, ka es ielinkoju vienu konkrētu piemēru, ko ātrumā varēju atrast? Te ir jautājums nevis pašiem programmētājiem, bet tizlenim kas iekļāva šo funkciju publiskā API, jo kurš ir tizlāks - core devs exposēt bezjēdzīgu publisku API vai users, kas jamo lieto īpaši neiedziļinoties iekšās? Izčeko VCS, palasi changelogs (kur tādi vispār ir), palasi komit logus. Vai man tev atreferēt visu to figņu tagad? Cašiera fantoms - es zinu kam fantoms vajadzīgs, tvaju *****. Tikai nesaprotu, kāda velna pēc uz Unix boksiem, piemēram, velkas windows fantoma binaries...? Un tā pat izvāca ārā ar nu kuru te versiju, neatceros vairs. To, ka man personīgi nācās vēl uzbrēkt Otvelam par to, ka Fantoma licensi vajadzētu ievērot es nemaz nekomentēšu... Pēdējais paragrāfs - es nesaprotu ko tu tur runā. Lasu, kaut kādi vārdi, bet loģikas nekādas. Moš izlasi vēlreiz ko es iepriekš uzrakstīju un šoreiz iedziļinies, a? Quote Link to comment Share on other sites More sharing options...
Kasspars Posted February 4, 2016 Report Share Posted February 4, 2016 Tiešām phantoms no cashier ir izvākts :) Phantom nemaz tik labi html -> pdf neģenerēja. Tabulas īpaši nesmuki zīmē. Par pēdējo paragrāfu - ja nesaprati, tad pats izlasi vēlreiz. Ja tā pat nesaprati, tad atstāj kā ir. Vispār jūtu, ka ar programmēšanu nenodarbojies. Esi pie devops darbiem pielikts? Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 4, 2016 Report Share Posted February 4, 2016 @F3llony - interesanti. Jo, piemēram, @Route('/foo/') pieņem gan /foo, gan /foo/. Tad kāpēc, ja ir parametrs, nav tāpat? Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 4, 2016 Report Share Posted February 4, 2016 @F3llony - interesanti. Jo, piemēram, @Route('/foo/') pieņem gan /foo, gan /foo/. Tad kāpēc, ja ir parametrs, nav tāpat? Nē, nepieņem. > @Route("/test/", name="homepage") > curl -I localhost:8000/test/ HTTP/1.1 200 OK > curl -I localhost:8000/test HTTP/1.1 301 Moved Permanently Location: http://localhost:8000/test/ Vienkārši bez parametra rūteris var uzminēt, ka tev tur ir slash, bet ja tur ir parametrs, rūteris īsti nesaprot ko ar to darīt. Šis edge keiss ir zināms, bet jams ir tik "edge", ka neko viņa sakarā neviens negrib darīt jo risinājums būtu bloated routing tables vai fastroute pa virsu vēl 10 regeksi. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.