Bir üretim sunucusunda geliştirme


35

Bugün bir üretim sunucusunda bir uygulama geliştirdiğim için bağırdım. Alıntı, " Bir üretim sunucusu üzerinde geliştirme kabul edilemez - hiç! "

İşte durum bu.

  1. Bir geliştirme örneği oluşturdum: http://example.com:3000
  2. Üretim örneği: http://example.com
  3. Tüm geliştirme çalışmamı tamamlıyorum http://example.com:3000ve müşteri değişikliklerden memnun olduğunda onları da oraya götürürüm http://example.com.

Çalıştığım uygulama eski bir Ruby on Rails uygulaması ve başlangıçta yerel olarak bir geliştirme ortamı kurmaya çalıştığımı söylemeliyim, ancak çalışmayı asla başaramadım. Bir süre denedikten sonra pes ettim ve prodüksiyon sunucusunda geliştirmeye karar verdim.

Yine aptal mıyım? Muhtemelen öyle, ama birkaç yıldır web geliştirme yapıyorum ve böyle bir durumla hiç karşılaşmadım. Kim haklı ve neden?


46
Tek geçerli imtiyaz, "kalkınmada çoğaltılamayan bir üretim sunucusuna sahip olmak hiç de kabul edilemez" olacaktır.
Blrfl

49
Bana göre, buradaki asıl sorun, neyin çalıştığını veya nasıl yapılandırıldığını hiçbir fikrinizin olmadığı bir üretim sisteminizin olmasıdır. Üretim makineniz düşerse tüm verilerini kaybederse ne yapardınız? Şimdi uygun bir geliştirme ortamı kuramazsanız, tek seçeneğiniz olduğunda ne yapacaksınız?
Greg Hewgill

@GregHewgill, evet bu iyi bir nokta
luk3thomas

25
Greg haklı, bir geliştirme makinesinde çevreyi yeniden oluşturmak için uygulama konusunda yeterli değilseniz, o zaman sadece üretim makinesini geliştirip test etmemelisiniz, o makineye konuşlandırmaya bile izin vermemelisiniz. Açıkça yanılıyordun ama ne yaptığını tam olarak anlayabilmen için patronuna ilk etapta erişim sağladığın için bağırırdım.
maple_shaft

3
Yerel kalkınma ortamı kuramazsanız, hiç bir zaman gelişmemelisiniz.
Jas

Yanıtlar:


58

Ben üretim sunucusunda geliştirirdim. İyi çalışabilir, ancak en az iki nedenden dolayı tavsiye edilemez:

  1. Geliştirme kodu, sonsuz döngülere, bellek sızıntılarına veya CPU'yu kilitleyen, tüm belleği tüketen veya sunucuyu üretim kodunuzu etkileyecek şekilde etkileyen başka sorunlara neden olabilir.
  2. Geliştirme çalışmanızın bir parçası olarak sunucu ortamının bileşenlerinde değişiklik yapmanız gerekiyorsa, Ruby veya MySQL sürümü veya her neyse, sıkıntı içinde olacaksınız.

1
Evet, bu iyi bir nokta. Ne kadar çok düşünüyorum, sizler tamamen haklısınız.
luk3thomas,

6
Üçüncü bir konu var: güvenlik. Birisi üretim sunucusunu tarar ve (geliştirme) uygulamanızı keşfediyorsa ve bunun sonucunda üretim uygulamasından ödün verirse ne olur? Yine de, bu olası bir senaryo olmasa da, bir sunucu veya sistemin güvenliğini sağladıktan sonra herkesin söylediği çok fazla.
Marco

Rezil sonsuz döngü problemi ...
Mansuro

3
@Marco Aslında, sunucu halka açıksa, bu çok olasıdır. Geliştirme sunucuları genellikle çok kötü bir güvenceye sahiptir (çünkü hata ayıklayıcılar ve yığın izleri gibi kolaylıklar güvenlik söz konusu olduğunda borçtur). Bir saldırgan, dev sunucudan yararlanarak ayrıcalıkları arttırabilirse, üretim uygulamasına tamamen sahip olabilir.
Mark E. Haase,

29

Diğerlerinin de belirttiği gibi, PROD ortamına kodlama yapmak kullanıcılarınızı hatalarınıza maruz bırakır. Farklı bir örnek başlatmış olsanız bile, hala paylaşılan donanım kaynaklarına sahipsiniz ve yine de üretim dosyalarına ve veritabanlarına erişebilirsiniz. Bazı yorumlar işaret olarak Dev örneği hacklenirse Ve eğer (örneğin, o silmek unutmak ve birisi daha sonra muazzam bir güvenlik Rails istismar keşfeder çünkü), artık birlikte genel olarak erişilebilir makinesi var senin uygulaması oyunculuk bir geçit olarak. Hangi olurdu ... talihsiz.

Farklı işletmeler buna farklı cevaplar veriyor, ancak genel olarak şu şekilde parçalanabilir:

  • Bir bozulma oldu mu?
  • Ne kadar (bu yüzden alabilir ikili geri alma, C Ben öncelikle iş ++ bir değişiklik dönmek alacağını anlamlı eski ikili "kayıp" ettik, özellikle Ruby daha uzun ve recompile gerekir)
  • Ne değişikliğin etkisi (kaba kılavuzu: saklanan verileri altüst ederek böylece çok daha kötü saklarken veya sırayla hiç sayfasını gösterilmiyor daha kötüdür verileri göstermiyor yerine)
  • Eğer batırdıysan kapıdan çıkarsan ne yaptığını bilen var mı?
  • Çarpmadan önce vidalanmayı önleyen / en aza indiren / tespit eden başka bir dağıtım seçeneği var mıydı?

Bu size son hesaplamayı verir:

  • Tamamen önlenebilir bu parçalamanın işine ne kadara mal olacağı?

Bu, tüm yönetim yapınızın bütçe kararlarını alan kişiye ne kadar az olduğu. Bu yüzden shouty.

Şirketin dahili "Hakkımızda" sayfasında çalışıyorsanız ve kendi isminizi L olarak yazıyorsanız, "Tanrı benzeri" Thomas, utanç verici takma sorunu; Eğer iş kritik satın alma uygulaması üzerinde çalışıyorsanız, ve yanlışlıkla düz metin ana sayfa kredi kartı ayrıntılarını ayıklama ... dava sorunu sona erer. Bu aşırı uçlar arasında yanlış yükleme, sakat bırakan verimlilik ve müşterileri uzaklaştırabilecek her şey yer almaktadır.

"Hakkımızda" sayfası için bile izin vermemenin nedeni, doğrudan üretimde kodlamanın bağımlılık yaratmasıdır . Bunu sadece küçükler için yaparak başlıyorsunuz, ama zamanla, DEV'yi envant etmemelisiniz.

Bunun ötesinde, işletmenin büyüklüğü büyük bir etkiye sahip olabilir. İki kişilik bir takımda, bir şey phut'a gittiğinde, omzunun üzerine yaslanıp "Oi, jackass, geri koy" yoluna gidersin. 300 kişilik bir şirkette, beceriksiz veya kötü olup olmadığı konusunda endişelenmeye başlamalısınız, yöneticileri kontrol etmedikleri şeylerden sorumlu tutulabilir.

Günün sonunda, prosedürü izler ve batırırsanız, prosedürde neyin yanlış olduğunu kontrol ederler. Eğer yorulma prosedürü ve batırıyorsanız, suçlama biraz dağılsa bile artık tek başına sizin sorumluluğunuzdadır. Üzerine zar atmak isteyip istemediğin sana kalmış.


Bu, bir üretim ortamında gelişen tuzakların iyi bir özetidir , ancak soru, üretim donanımında ayrı bir ortamda geliştirme hakkındaydı .
Carson63000

@ Carson63000 Anlaştık ve Yakup'un cevabı kesinlikle bu tarafta daha iyi. Benimkini biraz değiştirdim.
Deworde

13

Yerel olarak bir geliştirme ortamı oluşturmaya çalıştım, ancak hiçbir zaman çalışmasını sağlayamadım. Bir süre denedikten sonra pes ettim ve prodüksiyon sunucusunda geliştirmeye karar verdim.

Bir prodüksiyon sunucusunda AVOID geliştirmeye yönelik ifadeleri destekliyorum . Config dosyasında bir yazım hatası düzeltmesi ve yöneticiniz tarafından ısrar edilmesi durumunda, sadece GUN altında yapmanız gerekebilir.

WHY NOT?- Çünkü çok riskli ve daha sonra bir alışkanlık haline gelmeye başladı. Çünkü ölümcül üretim hataları / başarısızlıkları, işten kovulmanıza mal olabilir .

Beni yeniden yinelerler bunu tekrar edelim üzerinde yazım hatası düzeltme yapmak istenirse çift rağmen production, sunucuya ilk bunu yapmak Staging. veya başka bir deyişle, değişikliklerinizi test edin, test edin ve üretime başlamadan önce tekrar test edin.

Bu, " çabuk ve kirli yapın " kültürünün bir norm gibi göründüğü yerlerde sıklıkla gerçekleşen bir şeydir .

Düzenleme: Üretim sunucusu üzerinde geliştirme, ayrı bir ortam olarak da kabul edilemez . Çalışmanızın neden olduğu herhangi bir sorun, üretim sunucusunu aşağıya indirebilir ve üretim uygulama performansını etkileyebilir . Örneğin, bir güvenlik boşluğu olduğunda, önceki iş arkadaşım WinServer 2003 üretim sunucusunu geliştirme amacıyla kullanmaya çalışırken bir olayı hatırlıyorum.


Bu, bir üretim ortamında gelişen tuzakların iyi bir özetidir , ancak soru, üretim donanımında ayrı bir ortamda geliştirme hakkındaydı .
Carson63000

Teşekkürler, bunu yapmanın kaygılarını gideren bir düzenleme ekledim.
EL Yusubov

10

Bu gerçekten bir protokol sorunudur. Genel olarak, bu yapmak istediğin bir şey değil. Üretim makinelerini yalnız bırakmak istiyorsun. Hassas veriler içerebilirler ve üretim yerlerinin performans veya istikrarını, üretime hazır olmayan kodla tehlikeye atmak istemezsiniz.

Bu, bunun genel olarak yapıldığı zamanlar olduğunu söyledi. Trafik yoğunluğu düşük olan bir broşür veya basit CMS sitelerini dışarıya atıyorsanız, bu muhtemelen daha az sorun olacaktır. Ancak, hassas veriler veya "iş açısından kritik" süreçleri olan herhangi bir şey üzerinde çalışıyorsanız, aynı makinede geliştirme koduna sahip olma riskiniz olmamalıdır.


Tamam teşekkürler. Geliştirme kodu bir makineyi kararsız hale getirebilir mi? Eski bir ray uygulaması üzerinde çalışıyorum. Bana göre (naif bir kişi) geliştirme kodunun http://example.com:3000etkisi olmayacak gibi görünüyor http://example.com.
luk3thomas

2
@ luk3thomas: elbette, olmamalıydı. Ancak, web sunucusu veya Rails çerçevesinde, sunucuyu çökerten bir hata varsa? Jacob Terry'nin cevabında önerdiği gibi, dev kodunuzda sonsuz bir döngü ya da bellek sızıntısı, üretim sunucusundaki tüm kaynakları emer ve canlı sitenin performansını tehlikeye atarsa ​​ne olur?
Carson63000,

1
Bazen bu bir gerekliliktir. Pahalı yazılımlara lisans veren ve ikinci bir kopya için yalnızca geliştirme çalışmaları için bütçeye sahip olmayan dükkanlar gibi.
Brian Knoblauch,

8

Doğrudan üretimde gelişmemek için bir başka önemli sebep de, bir geliştirme örneğinin genellikle ayrıntılı hatalar ve yığın izleri üretmesi ve göstermesidir. Bunu asla kullanıcıya maruz bırakmak istemezsiniz.

Evet, müşteriye göstermek yerine onları günlüğe kaydedebilirsiniz, ancak bu hata ayıklamayı olduğundan daha az eğlenceli hale getirir .

Eklendi Geliştirme örneğinizle ilgili sorun yaşamaya ilişkin yanınızdaki sorunu ele alma: Bir Ubuntu Sunucusu ile üretim ortamımızı (donanıma dahil değil) kopyalayan bir VirtualBox tabanlı VM dağıtma konusunda büyük başarı elde ettim .


3
kaydetti, w / VirtualBox tavsiyesi için teşekkürler
luk3thomas 11:13

1
@ luk3thomas Ayrıca ücretsiz! VirtualBox + Ubuntu (muhtemelen en yaygın sanallaştırma kombinasyonlarından biri) için çevrimiçi tonlarca ders vardır .
msanford

8

Oldukça şaşırdım, henüz kimse en önemli nedenden bahsetmedi, neden üretim sunucularında geliştirmek kesinlikle yasak:

Bu kadar kolay olabilen üretim verilerini karıştırmayın!

Bir yerde küçük bir hata, diğer hesaplamalarda büyük sıkıntılara neden olur ve ardından ertesi gün, tüm veriler çöptür ve müşteri sinirlenir. Bu, kullanıcı arayüzündeki bir hatadan ya da oradaki ufak bir kazadan çok daha kötü.

Çoğu uygulama için, değer rutinde değil verilerde bulunur.


1
Üretim verilerini karıştırdıktan sonra bunu çabucak öğrenirsiniz. Sanırım bir DB'si yok.
Rocklan

8

Her zaman diğer geliştiricilere, belirli bir şirket için prosedürlerin ne olduğunu sormaya çalışırım. Genel olarak evet, her zaman:

  1. Yerel olarak oluşturun.
  2. Orada iyi oynayıp oynamadığını görmek için üretimi mümkün olduğunca taklit eden bir kutu tipine bastırın.
  3. Değişiklikleri gözden geçirmek için müşteri / KG ekibine geçmek için muhtemelen bir KG veya sertifikasyon örneğine itin.
  4. Üretime itin.

Sizin için tüm bunları işlemek için GitHub ile eşleştirilmiş Capistrano tariflerini kullanabilirsiniz . Bunu her zaman elle yapmak zorunda kalırsanız, hızlıca eskileşebilir.


raylar 2.3.11, muhtemelen böyle bir şey yapmayı
bırakacağım

1

Ürün geliştirme ile ilgili bir başka sorun, bazen, bu şeylerin kaynak kontrolünde kaçırılması ve gelecekteki bir sürümde hızlı düzeltme değişikliğinizin geri alınabileceğidir.

ABD'de halka açık bir şirketseniz, yasal nedenlerden dolayı eşyaya bile erişemezsiniz. Genel olarak, hiçbir şirkette bir geliştirici prod erişimi yapmamalıdır (tüm cevaplarda ve olası yasal nedenlerde belirtilen cevaplar için), bu nedenle yöneticiniz aynı zamanda bu sunucuya haklarınızı vermenize izin vermekte de yanlıştır.


0

"Her zaman" veya "hiçbir zaman" kullanan kurallar genellikle hasta tanımlıdır. En iyi uygulamanın ihlal edilmesinin haklı çıkacağı ileri vakalar olacak. Çok daha iyi tavsiye "Çok iyi nedenleriniz yoksa üretim sunucularına dokunmayın" olacaktır.

Kariyerimde, üretim sunucularındaki kodu değiştirmek için yalnızca iki neden buldum:

  1. Yalnızca orada olan ve geliştirme ortamında yeniden üretilemeyen hatalar veya davranışlar. Bunlar nadirdir ancak çok can sıkıcı ve bulmak zor olabilir.

  2. Birkaç dakikadan uzun sürerse normal dağıtım işleminden geçmek için bekleyemeyeceğiniz kritik hatayı doğrudan düzeltmek. Bundan sonra yönetim ile temizlendi. Şanslıysanız, tüm kariyeriniz için bunlardan sadece birkaçına sahip olmalısınız.

Her ikisi de sistemleri yakından tanıyan üst düzey geliştiricilere bırakılmıştır.


Yalnızca üretim ortamında meydana gelen hatalarınız varsa, geliştirme ortamınız üretim ortamına yeterince yakın değildir. ÇOK LEAST AT, üretim ortamı ile tam olarak aynı konfigürasyona sahip, tam OS ayarlarına, işleme donanımına ve kurulu yazılıma kadar aşamalı bir ortama sahip olmalıdır.
Nzall
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.