Tags: , | Categories: SSS (FAQ), Tip, Web Uygulaması Posted by okutbay on 11.10.2018 18:56 | Yorumlar (0)

Selamlar herkese,

Sanırım bir başlığı açmam gerekecek. ASP.NET Core MVC ile geliştirdiğim web uygulamasını nasıl güncelleyiyorum? Size bu yazımda biraz bundan bahsetmek istiyorum.

Geliştirme ortamı olarak Visual Studio 2017 kullanıyorum ancak Visual Interdev'den bu yana çok uzun yıllardır burada pek bir değişiklik olmadı. O yüzden gelecekte de köklü bir değişiklik beklemiyorum.

Öncelikli olarak kendi geliştirme ortamınızda değişikliklerinizi yaptınız. Varsa testlerinizi çalıştırdınız, yoksa kodunuzun işlevlerini fonksiyonel olarak test ettiniz, her şeyin olması gibi çalıştığına kanaat getirip canlı ortamdaki uygulamanızı güncellemeye karar verdiniz.

Şimdi size adım adım izlediğim yolu ve püf noktalarını vermeye çalışacağım.

Sahnenin Kurulması

Daha önce bir ya da bir kaç release çıktığım bir projeyi güncelleyeceğim. O yüzden sistemde hazırlanmış release dosyaları olması muhtemel. Hatta başka projeler de olabilir. O nedenle ben şöyle bir klasör yapısı kullanmayı uygun görüyorum: "C:\Projeler\Release\ProjeAdi\UygulamaAdi"

Örnek ile açıklamam gerekirsetüm kaynak kodları C:\Projeler altında dururken tüm çıktığım paketleri C:\Projeler\Release klasörü altında topluyorum. Ancak bunu yaparken de bir proje altında birden fazla deploy edilmesi gereken web uygulaması, API vb. olabileceği için proje adıyla açtığım klasörün altında da ürün ya da uygulama adıyla açılmış bir klasör içine publish ediyorum. Mesela bugün URLSohertener adlı projenin URLShortener.Web uygulamasını güncelleyeceğim için bu uygulamaya publish çıkacağız.

Publish edilecek folder ve üst folder içinde şu an bulunan dosyalar şunlar:

 

Görüldüğü üzere uygulama adının yanında tarihler yazan bazı rar dosyalar var. Bunlar önceki çıkılan publishlerin sıkıştırılmış yedekleri. Ben yöntem olarak çıktığım her release paketini sıkıştırılmış ve tarihlenmiş olarak saklıyorum. Tarihler neden önemli birazdan göreceğiz.

Not: Tabi ki CI/CD ile yapmak çok şık olur ama bireysel olarak bir şeyler yapmaya çalışırken her şeyi dört dörtlük yapmaktan önce ortaya birşeyler (MVP - Minimum Viable Product) çıkartıp insanların kullanımına sunmak daha öncelikli bir hal alıyor.

 

Publish (Release) Çıkılması

Visiual Studio ile açık olan solution üzerinde publish yapılacak projeadı üzerine faremizle ters tıklayarak combo menünün açılmasını sağlarız.

 
Açılan kombo menü üzerinde "Publish" seçeneğine tıklayarak projeye ait daha oluşturulmuş publish profil detaylarının görüntülendiği ekran çıkacaktır.
 
 
 
Ekran görüntüsünde görüleceği üzere burada publish profil adı ve publish butonun dışında nereye publish yapılacağı, mevcut dosyaların silinip silinmeyeceği, yapılacak publish için debug/release konfigurasyonu bulunmakta.
Her zaman bu ekran üzerinde yeni bir profil tanımlayabileceğiniz gibi actions altından profil adını değiştirme ve profil silme işlemini yapabilirsiniz. Mevcut profil ayarlarını değiştirmek isterseniz "Configure..." bağlantısına tıklamanız yeterli olacaktır. Bu ekranda target locatio'a gitmek isterseniz tıklanabilir bir link konulmamış ama yolu clipboarda kopyalayabilmeniz için ufak bir buton eklenmiş.
 
Daha önce publish yapmadıysanız ilk seferde buradaki detayları ayarlamanız gerekebilir. O yüzden "Configure..." bağlantısına tıklayarak nasıl bir şeyle karşılacağınızı biraz anlatmak istiyorum.
 
 
Bağlantıya tıkladığınızda açılan popup ekranda sizi "Connection" ayarları karşılar.Bu ayarlar Publish Method ve Target Location ayarlarıdır.
 
Bu ayarlar içinde Publish method ile 4 farklı metoddan birini seçebilirsiniz.
 
 
Hepsinin detaylarına giremeyiz ama isimleri aslında ne olduklarını anlatıyor.
 
Biz "File System" seçiyoruz. Dosyaları harddiskimizde belirlediğimiz yere (Target Location) bırakmasını isteyeceğiz. Target Location ayarında yukarıda ayarladığımız klasörlerin seçili olduğunu göreceksiniz. 
 
Next butonuna tıklayarak sonraki ayar ekranına geçebiliriz. Bu ekranda bizi karşılayan ayarlar Configuration, Target Framewok, Deployment Mode, Target Runtime, File Publish Options, Database ayarları bulunmakta
 
 
 
Burada işler biraz karışıyor. Bu ekran gerçekten ne yaptığınızı bilmenizi gerektiren bir ekran. Bu nedenle bu ayarlara biraz daha detaylı bakalım.
Configuration (Debug/Release): Burada Release/Debug seçimi yaparak derlenecek dosyalaradebug yapmanızı kolaylaştıran ilavelerin yapılıp yapılmayacağına karar verirsiniz. Test ortamları dışında canlı ortamlara yapılacak publishler için kesinlikle "Release"seçilmelidir. Çünkü debug yapılacak şekilde derlenen kodların performansı daha düşük olacak ve canlı ortamda gereksiz performans kayıplarına neden olacaktır.
Target Framewok: Açıkçası burada sadece sistemde yüklü olan frameworkler listeleniyor mu yoksa sadece uygulamanın frameworkü mü listeleniyor bilmiyorum. Yani uygulamayı desteklenen farklı frameworkler release edebiliyor muyum fikrim yok. Muhtemelen sadece uyumlu olanı listeliyor. Çünkü sistemimde .NET Framework 4.7.2 olduğu biliyorum ama burada çıkmıyor.
Deployment Mode (Framework-dependent/Self-Contained): Bunu incelemedim ama isimlerinden anladığım kadarıyla self-contained seçildiği zaman gerekli framework dosyalarını da içerecek şekilde pakete ekliyor ve paketi şişiriyor diye tahmin ediyorum. O yüzden kurulum yapacağım sunucuda framework olduğu için ben Framework-dependent olarak ayarlıyorum.
Target Runtime (Portable/win-x86/win-x64/osx-x64/linux-x64): Burada kurulum yapılacak sunucun işletim sistemi ve işlemci mimarisine göre karar verebilirsiniz ya da benim gibi portable seçerek herhangi bir işletim sisteminde çalışacak şekilde paketinizi oluşturabilirsiniz. Paketiniz şimesin benim tek platform ile işim olur diyorsanız portable yerine onu seçmeniz önerilir.
File Publish Options: İşaretleyerek önceki publishe ait dosyaları silerek temiz bir klasör içine publish çıkılmasını sağlayabilirsiniz. Ben genelde bunu işaretliyorum. Değişen giden bir kütüphane, dosya vb. var ise paketin içinde kalmaya devam ederek şişkinlik yapsın istemiyorum.
Database: Eğer projenizde SQL server vb. ayarlanmış bir database var ise onunla ilgili bir bilgi veriyor. Ben MongoDB kullandığım için ne işe yarar, ne çıkar burada bir fikrim yok.
 
Temel konulara değindiğimize göre atrık publish butonuna tıklayabilir ve publish işleminin tamamlanmasını bekleyebiliriz. İlerlemeyi Web Publish Activity ekranında takip edebilirken, olup biteni detaylı olarak görmek için "Output" ekranına göz atabiliriz.
 
 
 
 
Evet publish'i çıktık ve deploymen aşamasına geçebilir dosyaları sunucuya atarak canlı ortamdaki yazılımın güncellenmesini sağlayabiliriz.
 
 
 

 

Deployment: Tam (Full) veya kısmi (parital)?

Publish sonunda projenin çalışması için gerekli tüm dosyaları dosya sisteminde oluşturduk.Bunların hepsini sunucuya kopyalabileceğiniz gibi sadece son deploymenttan sonra değişen dosyaların kopyalanmasını (partial deployment) terich edebilirsiniz.
 
Eğer partial deployment yapmaya karar verirseniz işte bu noktada hatırlarsanız yukarıda "Ben yöntem olarak çıktığım her release paketini sıkıştırılmış ve tarihlenmiş olarak saklıyorum. Tarihler neden önemli birazdan göreceğiz. " demiştim. Daha önce yapılmış olan deployment paketlerini sakladığım için son deployment tarihini hatırlamak gibi bir dertten kurtulmuş oluyorum.
 
Dosyaları publish ettim klasördeyken arama kutusuna şunu yazıyorum "datemodified:<={son-paket-tarihi}". Eğer yedekler içindeki en günce paket tarihi 31 Ağustos 2018 ise şu şekilde yazıyorum "datemodified:‎<=31.‎08.‎201".Böylece dosya sistemim benim için bu tarih dahil olacak şekilde eski dosyaları göstermiş oluyor. Tek yapmanız gereken listelenmiş dosyaları seçerek silmek ve sadece son deploymenttan bu yana değişmiş olan dosyaların kalmasını sağlamak
 
 
 
BONUS: Aynı günde yapılan farklı deployment durumlarında tarih yanına saat de yazabilirsiniz. Örnek: datemodified:‎<11.‎10.‎2018 13:00
 
Artık son adım olarak bu pakete dahil olan dosyaları klasörü ile sıkıştırıp, dosya adına tarih ekleyerek yedek olarak bir kenarda durmasını sağlarız.
 
Bu dosyayı aynı zamanda sunucumuza dosyaları kopyalamak için de kullanacağız.
 

Son Adım

Oluşturduğumuz publish dosyasını sunucumuza taşırız. Burada ister FTP yap, ister RDP o dosya sunucuna kopyalansın yeterki :D
Sonrasında ben şu adımları izliyorum. Bir tane deployment klasörüm var. Sıkıştırılmış dosya içeriklerini buraya açıyorum.
Publish yapılacak web uygulamasının bulunduğu klasörü her ihtimale karşı sıkıştırıp, tarih vererek yedekliyorum.
IIS kullanıyorsanız uygulamayı ve application poou durdururak kilitli dosyalar varsa bırakılmasını sağlıyoruz ki kopyalamada sorun çıkmasın.
Sonrasında deployment klasörüne açtığımız dosyaları uygulama klasöründeki dosyaları ezerek kopyalıyoruz.
Bu noktada en önemli konu eğer development için ayrı ayrı config dosyasınız yoksa ise canlı ortamdaki config dosyasınızı ezmeden varsa yeni eklenen ayarları bu dosyaya manuel olarak eklemektir.
Artık uygulamayı güncellediğimize göre tekrar IISde application pool ve uygulamayı start ediyoruz. Uygulama adresine gittiğimizde açılıyorsa ne mutlu bize. Haydi geçmiş olsun.
 
Bir başka yazımızda buluşmak üzere. Klavyeleriniz şen ola.
 
Ozan Kutlu Bayram
 
 

 
 
 
 
 
 

 
 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: IDE, SSS (FAQ), Tip, UI, Web Uygulaması Posted by okutbay on 01.10.2011 02:16 | Yorumlar (0)

Geliştirdiğimiz web uygulamasını belirli aralıklarla düzenli olarak bir sunucuya göndermemiz gerekiyorsa her seferinde tüm dosyaları sunucuya yüklemeye çalışmak zaman kaybettirebilir...

Son güncelleme zamanından önce değiştirilmiş dosyaları bulmak için dosya arama fonksiyonunu kullanabilirsiniz. Bulunan dosyaları seçil sildiğinizde elinizde sadece son guncelleme zamanindan bu yana degisen dosyalar kalacaktır.

Windows 7 de arama bir miktar farklı olduğundan belirli bir tarihten onceki dosyalari bulmak için arama kutucuğunua "datemodified:<‎18.‎05.‎2011" yazabilirsiniz.

 

 

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: Script, SSS (FAQ), Tip, Web Uygulaması Posted by okutbay on 22.02.2011 21:01 | Yorumlar (0)

Selamlar, javascript i çok çirkin bulmama ve sevmememe rağmen bir web uygulama geliştiricisinin hayatını nasıl kurtara bileceğinin farkındayım... Tabi yazılan javascript deneyimsiz ellerden çıkmışsa bir o kadar da ölümcül olabilir...

Bugün sizlerle çok ufak ama hayat kurtaracak bir script parçası paylaşacağım... 90lı yılların sonunda ASP ile uygulama geliştirirken sık sık frame ve iframe yapılarını kullanmak zorunda kalırdır. Daha sonra ASP.NET le beraber kendi adıma bunları hiç kullanmadım desem yeridir. Eğer uygulamanızda forms authentication (ya da benzeri bir yapı) kullanıyorsanız frame içinde gösterilen sayfanın login gerektirecek bir durumla karşılaşması halinde frame içinde login sayfasına gidecek ve login olduğunuzda eğer return url bilinmiyorsa ana sayfaya gitmesi halinde hoş olmayan bir görüntü ile karşılaşabilirsiniz. Bu sorunu aşmanın bir kaç farklı yolu olsa da bana en pratik geleni sizinle paylaşmak istiyorum. Bu ufak script ilgili sayfada çalışarak en üst framede yüklenmesini garanti edecektir...

Klavyeleriniz şen ola.

<script type="text/javascript" language="javascript">
    if(top.frames.length>0){
        top.location = 'hede.aspx';
    }
</script>  

1 kişi tarafından 4.0 olarak değerlendirildi

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: Coding Disaster, Genel, Hata, Programlama, SSS (FAQ) Posted by okutbay on 24.11.2010 14:52 | Yorumlar (0)

Yazılım işindeyseniz sıfırdan geliştireceğiniz yeni projelerin toplamından daha fazla bitmiş, çalışmakta olan sistemlere bakım yapmakla, hatalarını gidermekle uğraşacağınız çok kuvvetli bir olasılıktır (Bu gerçeği bilerek iş hayatına atılırsanız yaşayacağınız hayal kırıklıklarının mesleğinize duyduğunuz sevgiyi azaltmasının önüne geçebilirsiniz gibi geliyor...)

Bir gerçek daha yazılım geliştirirken karşınıza çıkacak en can sıkıcı hatalardan biri null reference hatalarıdır. Can sıkıcıdır çünkü kodu yazan arkadaşınız (ya da siz) nasıl olur da null olma olasılığına karşı gerekli kontrolü yapmayı unutmuşdur.

Ama bu hatadan daha da can sıkıcı olanı bir string ya da dizinin null olmasıdır. Çünkü bir dizi ya da string null ise .Lenght(), .ToString() gibi metodlarını çatır çatır patlayacaktır.

Bu duruma en temel çözüm her hangi bir özellik ya da method string ya da array döndürüyorsa null döndürmesine asla izin vermemektir (bunu sadece ben söymiyorum Microsoft da best practice olarak bunu öneriyor...). NULL yerine boş string ya da dizi döndürün...

Klavyeler şen ola...

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories: SSS (FAQ), Veritabanı, Programlama Posted by okutbay on 27.09.2010 11:04 | Yorumlar (0)

ExecuteNonquery ile çalıştırdığınız sql ifadeleri etkilenen satır sayısı olarak -1 döndürüyor ise muhtemelen çalıştırdığınız stored procedure içinde aşağıdaki ifade vardır.

SET NOCOUNT ON;

Bu ifade var ise çalışıtırılan sorgunun sonucunda dönen (ya da etkilenen) satır sayısı döndürülmez. Select ifadeleri için mantıklı olan bu opsiyon silme, güncelleme ve ekleme işlemlemleri için anlamsızdır. İfadeyi kaldırın ya da OFF yapın böylece etkilenen satır sayını alabilirsiniz.

Not: Bu ifade sql server management studio tarafından yeni yaratılan stored procedurelere otomatik olarak eklenmektedir. Yazacağınız stored procedure insert, update, delete yapacak ise kaldırın.

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: Tip, SSS (FAQ), Web Uygulaması, Browsers Posted by okutbay on 18.02.2010 13:12 | Yorumlar (0)

If you hava a javascript like this:

    1 <script language="javascript" type="text/javascript">

    2 window.status ='some text';

    3 </script>

You will see firefox is not showing "some text" in the status bar. Too see your text you must enable it from "Advanced Javascript Settings" window.

Enable status bar with FF

 

Happy coding...

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , , , | Categories: Programlama, SSS (FAQ), Tip Posted by okutbay on 13.11.2009 17:32 | Yorumlar (0)

Clipboard is a windows object. If you want to use clipboard in your .NET framework console applications you must reference `System.Windows.Forms` and mark your main method with `STAThreadAttribute` attribute.

Then you can use this class's methods e.g. Clipboard.SetText("some text to store in the clipboard");

Happy coding.

1 kişi tarafından 2.0 olarak değerlendirildi

  • Currently 2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , | Categories: SSS (FAQ), Tip, Web Uygulaması Posted by okutbay on 29.09.2009 21:46 | Yorumlar (0)

You can add the <location> element with the “inheritInChildApplications” attribute to the root web.config. This attribute will prevent child applications inherit some specified configuration from the root web.config.

The attribute must be placed in the <configuration> section of the web.config. It looks like this:
<location path="." inheritInChildApplications="false">
<system.web>
 <!--
     ……
     Your settings

  -->
</system.web >
</location>

Referance:

SectionInformation.InheritInChildApplications Property

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Categories: IDE, Programlama, SSS (FAQ), Tip Posted by okutbay on 11.09.2009 10:35 | Yorumlar (0)

While we are coding we used to delete blank lines with 'Shift + Del'. Shift + Del shortcut is same as 'Ctrl + X'. And if you copy something to clipboard before cutting the blank lines, it will be replaced by the blank line.

You can change this behaviour with VS 2008 settings. Tools > Option > Text Editor > All Languages (or just for specific language) > Uncheck 'Apply Cut or Copy commands to blank lines when there is no selection'



Happy coding...

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Categories: SSS (FAQ), Tip, Veritabanı Posted by okutbay on 09.09.2009 12:24 | Yorumlar (0)

You can switch the bit field's value with single update statement by using exclusive or operator.

UPDATE AdminUsers

SET IsActive = IsActive ^ 1

WHERE Id = 42

Happy codding...

Referance: ^ (Bitwise Exclusive OR) (Transact-SQL)

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5