Sürüm kontrolü ve kişisel yapılandırma dosyası


36

Projemiz kullanıcıya özel bir yapılandırma dosyası kullanıyor. Her kullanıcı için farklı olduğundan bu dosya şu anda sürüm denetiminde değildir. Sorun, bir geliştirici yapılandırma gerektiren yeni bir modül eklediğinde veya mevcut bir modülün adını değiştirdiğinde, diğer geliştiriciler hatalarını kendi özel yapılandırma dosyaları güncellenmediği için alır.

Sorunu çözmek için iki yapılandırma dosyasıyla çalışmayı düşündük: sürüm kontrolünde olacak ve yeni bir modül ekleyen her geliştirici tarafından düzenli olarak güncellenecek varsayılan / global bir yapılandırma dosyası ve saklanacak özel bir yapılandırma dosyası sürüm kontrolü ve sadece kullanıcıya özel değişiklikler içerecektir.

Ancak, bu hala geçici bir çözüm gibi görünüyor.

Daha iyi bir çözüm önerebilir misin?

Profesyoneller ne yapar?



4
Boggle ... Neden dünyadaki geliştiricilerin modülleri yeniden adlandırmasına ve büyük bir yükseltme dışındaki herhangi bir noktada müşteri yapılandırmasını bozmasına izin veriyorsunuz ?
Mark Booth,

@jk evet, daha iyi bir eşleşme bile var: stackoverflow.com/questions/1974886/…
Erel Segal-Halevi

Şaşırdım. Yükseltmeleri yüklediğinizde bu nasıl bir sorun değil.
Joshua

6
Geçici bir çözüm değil. Birincil konfigürasyon dosyası, kullanıcıya özel konfigürasyon dosyalarının gerektirdiği şekilde geçersiz kılınan versiyon kontrolünde bulunur. Elbette, kullanıcıya özel konfigürasyon miktarının en aza indirilmesi gerekir, ancak bazı küçük miktarlar kaçınılmaz olabilir.
William Payne

Yanıtlar:


22

Burada zaten bazı iyi cevaplar almanıza rağmen, çoğu sorununuzun temel nedenini özlüyor: kullanıcı yapılandırma dosyalarınız yalnızca kullanıcıya özel bilgilerden daha fazlasını içeriyor gibi görünüyor, ayrıca başka bir yerde sürüm kontrolü altında olan (belki gereksiz) bilgileri de içeriyor , muhtemelen modül isimleri gibi farklı dosyalarda.

Burada iki olası çözümü düşünebilirim:

  • bu bilgiyi titizlikle ayırmaya çalışın. Örneğin, kullanıcı ayarlarınızda herhangi bir modül adı kullanmayın. Modüllere başvurmak için kimlik numaralarını (örneğin, GUID'ler) kullanın ve bu kimlik numaralarının bir modüle atandıktan sonra asla değişmemesine izin verin. Elbette, bu muhtemelen kullanıcı yapılandırma dosyalarınızın şu anda sahip olabileceği basitliklerini yitirmesinin dezavantajıdır. Düz bir metin editörü kullanmak yerine, yapılandırma dosyalarınızı düzenlemek için bir GUI aracı oluşturmanız gerekebilir.

  • config dosya biçiminize bir sürüm numarası verin ve ne zaman bir modül adı gibi bir şey değiştirildiğinde, onlara yeni bir sürüm numarası atayın. Daha sonra sürüm numaralarını kontrol eden bir yükseltme betiği sunabilirsiniz ve config dosyası güncel değilse, dosyada bulduğu tüm modül adlarını değiştirir ve daha sonra sürüm numarasını artırır. Bu otomatik hale getirilebilir, böylece yükseltme işlemi günlük çalışmalarında takım arkadaşlarınızı rahatsız etmez.

EDIT: Gönderinizi tekrar okuduktan sonra, yeni modüllerin yeni eklendiği ancak yeniden adlandırılmadığı sürece, sözde çözümünüzün makul olduğunu düşünüyorum. Yukarıda yazdıklarım daha sonra modül adlarını veya mevcut modül konfigürasyon yapısını değiştirmeye izin verecek. Fakat buna ihtiyacınız yoksa, en basit çözüme sadık kalacağım.


11

Bu makul bir çözüm.

Herhangi bir yeni konfigürasyon elemanının (elemanlarının) başlangıç ​​değerlerini belirlemek için bir yol gerekir. Bunlar bir yerde saklanmalı ve global, salt okunur, yapılandırma dosyası açık bir seçimdir.

Sonra her kullanıcı kişisel yapılandırmasını değiştirdiğinde, bu değişiklikleri yerel kopyasına yazarsınız.

Kodunuzun önce genel yapılandırmayı ve değiştirilen değerlerin üzerine yazması için kullanıcıya özel olanı okuması gerekecektir. Bu, yerel olanı okumaktan ve daha sonra hangilerinin ayarlanmadığını ve bu nedenle de genel ayarlar dosyasından okumaya ihtiyaç duymaya çalışmaktan çok daha basit olacaktır.

Depolama için XML gibi bir şey kullanıyorsanız, ayarları kaldırdığınız durumu ele alma konusunda endişelenmenize gerek yoktur. Dosyanın kullanıcı kopyasından talep edilmezler ve dosyayı kaydetme sırasında yeniden yaratırsanız, değişiklikten sonra uygulama ilk kez kullanıldığında kaldırılırlar.


3

Biraz ilginç bir çözümümüz var, öncelikle PHP geliştiricileriyiz, bu yüzden PHP'de yazılmış otomatik görevler oluşturmanıza izin veren Phing kullanıyoruz, bu nedenle normal svn güncellememizi yapmak yerine, svn güncellemesini çağıran "phing güncellemesi" yapıyoruz, ve sonra config'lerimizi uygun değişkenlerle değiştiririz, örneğin, config:

$db_user = "${test.db_user}";

Bu nedenle, yapılandırma dosyalarının tümü bu ilginç sözdizimiyle sürümlenir ve daha sonra, belirli örneğim için, bu "değişkenleri" değiştirilmemiş ini dosyalarında belirtilen sürümsüz ayarlarla değiştiren, geçici olmayan bir yapılandırma dosyası oluştururuz. Bu şekilde, kullanıcıya özel dosyaları değiştirebilir ve değişikliklerin diğer çalışma kopyaları boyunca doldurulmasını sağlayabiliriz.


2

Program, yapılandırma dosyasında değer bulunmadığında kodun varsayılan ayarlarında olmalıdır. Bu şekilde yeni şeyler eklendikçe, bozulmayacak, yükseltme yolunuz daha yumuşak olacak ve kullanıcılarınız da yapılandırma dosyasını karıştırdıklarında geri dönüş yapacaklardır.

Başka bir daha karmaşık örnek, program başlangıcında veya başka bir önemli noktada olabilir, bir başlatma modülü kullanarak yapılandırma dosyasını açın ve eksik olan varsayılanları ekleyin, ancak bu oldukça ağır görünüyor.


Bunun yalnızca geliştiriciler için bir sorun değil, genel bir dağıtım sorunu olduğunu belirtti.
sleske

2

Kişisel konfigürasyon dosyasına bir versiyon numarası giriniz (konfigürasyon formatının versiyon numarası).

Kişisel konfigürasyon dosyasını işleyen kodun versiyon numarasını kontrol etmesini ve güncel olmaması durumunda güncelleme prosedürünü takip etmesini sağlayın. Bu nedenle, temel olarak, mevcut yapılandırma dosyalarını kıracak bir değişiklik yapan herhangi birinin yapılandırma dosyası biçiminin sürüm numarasını girmesi ve önceki sürümün yapılandırma dosyalarını güncellemek için bir prosedür yazması (bölümleri yeniden adlandırması vb.) Ve yeniden kaydetmesi gerekir. onlar.

Muhtemelen yine de son kullanıcılar için böyle bir işlem isteyeceksiniz, bu yüzden geliştiricilerinizin hayatını kolaylaştırmak için de kullanabilirsiniz.


1

Genelde bunu nasıl gördüğümü, depoda varsayılan değerleri kontrol eden bir yapılandırma dosyasına sahip olmaktır. Bunlar, örnek olarak, test sunucusunda ihtiyaç duyulan değerler olabilir. Ardından, geliştirici dosyayı teslim aldığında tüm değerlere sahip olur. Yeni bir alan eklenir veya bir alan kaldırılırsa, bu bir birleştirme işlenir. Bir geliştirici, hedef sunucu için gereken değeri kontrol edecek ve kişisel gelişim ortamı için olan alanlardaki diğer değişiklikleri kontrol etmeyecektir.

Birleşmenin doğru yapıldığından emin olmak önemlidir, ancak bu benim için oldukça güvenli görünüyor.


Bu oldukça hata eğilimli görünüyor; Bunu yaptım, ancak kişisel ayarlarınızı yanlışlıkla kontrol etmeye devam ettiğimde, daha sonra kullanılan diğer ayarların üzerine yazdı :-(. Ayrıca, bu, tüm ağacın VCS araçlarında her zaman "değiştirilmiş" olarak görüneceği anlamına gelir. sakıncalı
sleske

@sleske Belli bir disiplin gerektirir. Ama dürüst olmak gerekirse, çoğu geliştiriciden bu işi çok iyi yapma yeteneğini beklerdim.
Thomas Owens

1

Burada yaptığımız ayar blokları oluşturmak. Bu Zend'de şöyle yapılabilir:

[production]
key1: parameter1
key2: parameter2

[testing: production]
key1: parameter2
key3: parameter4

Bu, testin üretimi miras aldığı ve bunu key3 ile genişlettiği anlamına gelir. Her geliştiricinin yapması gereken her şey ortamını ayarlamaktır (bu durumda test veya üretim).


Ayarlar daha kullanıcıya özeldir. Uygulama klasörleri, kişisel tercihler, vb. Gibi şeyleri içerirler. Dolayısıyla, önceden tanımlanmış iki ortam arasında seçim yapmak yeterli değildir.
Erel Segal-Halevi

Hangi ayarlara ve bunların nasıl kullanıldığına bağlı olarak, Zend için ini dosyasındaki kaynakları kullanabilirsiniz. Bunun, probleminiz için de geçerli olup olmadığından emin değilsiniz.
Agilix

Sadece kaynaklara değil, her kullanıcıya özel tercihleri ​​yerine getirebilecek daha genel bir çözüme ihtiyacım vardı.
Erel Segal-Halevi

Burada sadece bir düşünce ama bunları bir veritabanında saklamak daha iyi olmaz mıydı? En azından tercihler. Ve sonra o kullanıcıyı bir kullanıcıyla birleştirebilirsin.
Olmazsa

0

Bu, gönderiye dayalı yararlı bir çözümdür: Parolaları kaynak kontrolünde tutma

Özetle, strateji "konfigürasyon dosyasının şifrelenmiş bir versiyonunu kaynak kontrolünde tutmak ve daha sonra kullanıcının bu verileri şifreleyip şifresini çözebilmesi için bir araç sağlamaktır".

  1. Bir kukla comfig dosyası oluşturun ve .gitignore.
  2. Config dosyasını şifreleyebilen ve şifresini çözen bir makefile oluşturun
  3. Makefile ve şifreli config dosyasını depoda saklayın
  4. Makefile bir şifre ve şifre için yazarla nasıl temasa geçeceğinizi sorar.
  5. Proje oluştururken eğer makefile çalışmadıysa, kullanıcıya console.error ("Konfigürasyon dosyası [conf / settings.json] eksik! Çalıştırmayı unuttun make decrypt_confmu?") İle uyarın ;
  6. Config dosyasının güncel olduğundan emin olmak için bir kontrol açıklanmıştır.

1
-1, asıl soruya hiç cevap vermiyor çünkü. Ayrıca, bir bağlantıdan biraz daha küçük ve hiçbir açıklama yapılmayan cevaplar Stack Exchange Q / A formatı için kullanışlı değildir, çünkü harici bağlantılar bir noktada kaybolabilir ve önerilen yanıtın ne olduğuna atıfta bulunulmaz.
Derek,

1
Bu olsa da ilginç bir yazı.
Erel Segal-Halevi

0

Bunun gibi yapılandırma sorunlarını ele alan Config adlı bir araç geliştirdik . Yapacağınız şey 1 ana yapılandırma dosyası oluşturmak (veya içe aktarmak). Sonra Yerel adında bir ortam oluşturun. Yerel ortamda, kullanıcı başına 1 örnek olmak üzere birden çok örnek oluşturun. Yeni bir yapılandırma girişi eklemek veya modül adını değiştirmek gibi genel bir değişiklik yapmanız gerekiyorsa, değişikliği yapın ve panoya uygulanır. Bir örnek / kullanıcı değişikliği yapmak istiyorsanız, bu yapılandırma değerini bir değişken haline getirin, ardından değişkeni değiştirin. Bu değişiklik yalnızca kendi örneğinize / kullanıcınıza uygulanacaktır. Bunların hepsi sürüm kontrolü altında. Konfigürasyon dosyalarını push veya pull ile dağıtın. Çekme seçeneği git çekmeye benzer, ancak bu belirli örnek / kullanıcı için.

Config, kullanıcılar arasında yapılandırmaları karşılaştırma, arama, etiketleme, doğrulama ve iş akışı gibi ek özellikler sunar. Bu SaaS, yani henüz bulut için henüz hazır olmayanlar için değil, bir şirket içi planımız var.


Sanırım geliştiricilerin konfigürasyonlarını yönetmek için bir SaaS dahil etmek büyük bir engel teşkil eder ... Ama bu tam da benim fikrim. Ayrıca, eğer konfigürasyon hassas veriler içeriyorsa (olasılıkla, muhtemelen kendi iş istasyonlarında test yapmak için olduğu için), anında başlatılabilir.
Mael

Çözümü bulmak, topluma sormak, uygulamak ve sürdürmek için harcanan zamana karşı kurulumun ne kadar kolay olduğunu düşünüyorsanız, Config'in çok önemli olduğunu düşünmüyorum. Config herhangi bir platform, format, dil, kütüphane üzerinde çalışır, böylece sadece bir kez öğrenirsiniz. Hassas verilerde, müşteri tarafında şifreleme seçeneği var, yerel bir kasa olacak. Hepsini giren kullanıcılar şirket içi kurulum yapabilir veya VPC kullanabilir.
Bienvenido David
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.