{"id":38703,"date":"2026-02-05T21:41:38","date_gmt":"2026-02-05T18:41:38","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38703"},"modified":"2026-02-05T21:41:38","modified_gmt":"2026-02-05T18:41:38","slug":"otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/","title":{"rendered":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi<\/h2>\n<p>Ruby on Rails uygulamalar\u0131 geli\u015ftirmek keyifli ve verimlidir, ancak uygulaman\u0131z\u0131 canl\u0131ya almak (deployment) s\u00fcreci manuel olarak yap\u0131ld\u0131\u011f\u0131nda s\u0131k\u0131c\u0131, zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k olabilir. S\u00fcrekli entegrasyon ve s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) prati\u011finin ayr\u0131lmaz bir par\u00e7as\u0131 olan otomatik da\u011f\u0131t\u0131mlar, bu sorunlar\u0131 ortadan kald\u0131rarak geli\u015ftiricilerin daha \u00e7ok kod yazmaya odaklanmas\u0131n\u0131 sa\u011flar. Capistrano, Rails uygulamalar\u0131 i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f, SSH \u00fczerinden sunuculara komutlar g\u00f6ndererek da\u011f\u0131t\u0131m s\u00fcrecini otomatikle\u015ftiren g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu rehberde, Capistrano&#8217;yu kullanarak Rails uygulaman\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m \u00f6\u011freneceksiniz.<\/p>\n<h3>Capistrano Nedir ve Neden Kullanmal\u0131s\u0131n\u0131z?<\/h3>\n<p>Capistrano, Ruby ile yaz\u0131lm\u0131\u015f, uzak sunucularda komut dosyalar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in tasarlanm\u0131\u015f bir otomasyon arac\u0131d\u0131r. \u00d6zellikle Rails uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131 i\u00e7in pop\u00fclerdir \u00e7\u00fcnk\u00fc:<\/p>\n<ul>\n<li>\n        <strong>Tutarl\u0131l\u0131k:<\/strong> Da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini standartla\u015ft\u0131rarak her seferinde ayn\u0131 ad\u0131mlar\u0131n izlenmesini sa\u011flar, bu da insan hatalar\u0131n\u0131 minimize eder.\n    <\/li>\n<li>\n        <strong>H\u0131z:<\/strong> Manuel ad\u0131mlar\u0131 otomatikle\u015ftirerek da\u011f\u0131t\u0131m s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r.\n    <\/li>\n<li>\n        <strong>G\u00fcvenilirlik:<\/strong> Otomatikle\u015ftirilmi\u015f s\u00fcre\u00e7ler daha az hataya a\u00e7\u0131kt\u0131r. Ayr\u0131ca, Capistrano&#8217;nun yerle\u015fik geri alma (rollback) yetenekleri sayesinde hatal\u0131 bir da\u011f\u0131t\u0131m durumunda kolayca \u00f6nceki s\u00fcr\u00fcme d\u00f6nebilirsiniz.\n    <\/li>\n<li>\n        <strong>Esneklik:<\/strong> Farkl\u0131 ortamlara (staging, production) ve birden fazla sunucuya ayn\u0131 anda da\u011f\u0131t\u0131m yapma yetene\u011fi sunar.\n    <\/li>\n<li>\n        <strong>Entegrasyon:<\/strong> Git, Bundler, RVM\/rbenv, Puma\/Passenger gibi bir\u00e7ok Rails ekosistemi arac\u0131yla sorunsuz entegrasyon sa\u011flar.\n    <\/li>\n<\/ul>\n<p>Capistrano, SSH arac\u0131l\u0131\u011f\u0131yla sunucular\u0131n\u0131za ba\u011flan\u0131r ve tan\u0131mlad\u0131\u011f\u0131n\u0131z g\u00f6revleri \u00e7al\u0131\u015ft\u0131r\u0131r. Bu g\u00f6revler, genellikle Git deposundan kodu \u00e7ekme, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleme, veritaban\u0131 ge\u00e7i\u015flerini (migrations) \u00e7al\u0131\u015ft\u0131rma, varl\u0131klar\u0131 (assets) \u00f6n derleme ve uygulama sunucusunu yeniden ba\u015flatma gibi ad\u0131mlar\u0131 i\u00e7erir. Uygulaman\u0131z\u0131n her yeni s\u00fcr\u00fcm\u00fc ayr\u0131 bir dizine da\u011f\u0131t\u0131l\u0131r ve mevcut s\u00fcr\u00fcm, sembolik bir ba\u011flant\u0131 (symlink) ile i\u015faret edilir. Bu yap\u0131, geri alma i\u015flemlerini son derece kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Capistrano ile Rails Uygulamas\u0131n\u0131 Yap\u0131land\u0131rma<\/h3>\n<p>Capistrano&#8217;yu uygulaman\u0131za entegre etmek ve da\u011f\u0131t\u0131m s\u00fcrecini yap\u0131land\u0131rmak birka\u00e7 ad\u0131mdan olu\u015fur. Ba\u015flamadan \u00f6nce, sunucunuzda SSH eri\u015fiminizin, Git&#8217;in ve Ruby&#8217;nin kurulu oldu\u011fundan emin olun. Ayr\u0131ca, sunucunuzda uygulaman\u0131z\u0131 da\u011f\u0131tmak i\u00e7in \u00f6zel bir kullan\u0131c\u0131 (\u00f6rne\u011fin, <code>deploy<\/code>) olu\u015fturmak iyi bir g\u00fcvenlik prati\u011fidir.<\/p>\n<h4>Ad\u0131m 1: Capistrano Kurulumu<\/h4>\n<p>Rails uygulaman\u0131z\u0131n <code>Gemfile<\/code>&#8216;\u0131na Capistrano gem&#8217;ini ve gerekli eklentileri ekleyin:<\/p>\n<pre><code class=\"language-ruby\">\n<h2>Gemfile<\/h2>\ngroup :development do\n  gem 'capistrano', '~> 3.17'\n  gem 'capistrano-rails', '~> 1.7'\n  gem 'capistrano-rbenv', '~> 2.2' # Veya capistrano-rvm\n  gem 'capistrano-bundler', '~> 2.1'\n  gem 'capistrano-puma', '~> 5.5' # Veya capistrano-passenger, capistrano-unicorn\nend\n<\/code><\/pre>\n<p>Daha sonra, gem&#8217;leri y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">\nbundle install\n<\/code><\/pre>\n<p>\u015eimdi Capistrano&#8217;yu projenize entegre edin. Bu komut, gerekli Capistrano yap\u0131land\u0131rma dosyalar\u0131n\u0131 olu\u015fturacakt\u0131r:<\/p>\n<pre><code class=\"language-bash\">\ncap install\n<\/code><\/pre>\n<p>Bu komut a\u015fa\u011f\u0131daki dosyalar\u0131 olu\u015fturur:<\/p>\n<ul>\n<li><code>Capfile<\/code>: Capistrano&#8217;nun ana yap\u0131land\u0131rma dosyas\u0131d\u0131r. Hangi g\u00f6revlerin y\u00fcklenece\u011fini belirtir.<\/li>\n<li><code>config\/deploy.rb<\/code>: T\u00fcm ortamlar i\u00e7in genel da\u011f\u0131t\u0131m ayarlar\u0131n\u0131 i\u00e7erir.<\/li>\n<li><code>config\/deploy\/staging.rb<\/code>: Staging ortam\u0131na \u00f6zel ayarlar.<\/li>\n<li><code>config\/deploy\/production.rb<\/code>: Production ortam\u0131na \u00f6zel ayarlar.<\/li>\n<\/ul>\n<h4>Ad\u0131m 2: <code>Capfile<\/code> Yap\u0131land\u0131rmas\u0131<\/h4>\n<p><code>Capfile<\/code> dosyas\u0131, Capistrano&#8217;nun hangi eklentileri ve g\u00f6revleri y\u00fcklemesi gerekti\u011fini s\u00f6yler. <code>cap install<\/code> komutu genellikle temel yap\u0131land\u0131rmay\u0131 yapar, ancak kulland\u0131\u011f\u0131n\u0131z t\u00fcm eklentilerin burada <code>require<\/code> edildi\u011finden emin olun.<\/p>\n<pre><code class=\"language-ruby\">\n<h2>Capfile<\/h2>\n<h2>Load DSL and set up stages<\/h2>\nrequire \"capistrano\/setup\"\n\n<h2>Include default deployment tasks<\/h2>\nrequire \"capistrano\/deploy\"\n\n<h2>Load the SCM plugin for Git (default)<\/h2>\n<h2>require \"capistrano\/scm\/git\"<\/h2>\n\n<h2>Load the Rails plugin<\/h2>\nrequire \"capistrano\/rails\"\nrequire \"capistrano\/bundler\"\nrequire \"capistrano\/rbenv\" # Veya capistrano\/rvm\nrequire \"capistrano\/puma\" # Veya kulland\u0131\u011f\u0131n\u0131z uygulama sunucusu\n<h2>require \"capistrano\/passenger\"<\/h2>\n<h2>require \"capistrano\/unicorn\"<\/h2>\n\n<h2>Custom tasks that you might want to load<\/h2>\n<h2>Dir.glob(\"lib\/capistrano\/tasks\/*.rake\").each { |r| import r }<\/h2>\n<\/code><\/pre>\n<h4>Ad\u0131m 3: <code>config\/deploy.rb<\/code> Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Bu dosya, t\u00fcm da\u011f\u0131t\u0131m ortamlar\u0131 i\u00e7in ge\u00e7erli olan temel ayarlar\u0131 i\u00e7erir.<\/p>\n<pre><code class=\"language-ruby\">\n<h2>config\/deploy.rb<\/h2>\nlock \"~> 3.17\"\n\nset :application, \"my_rails_app\" # Uygulaman\u0131z\u0131n ad\u0131\nset :repo_url, \"git@github.com:kullaniciadi\/depoadi.git\" # Git deponuzun URL'si\n\n<h2>Varsay\u0131lan branch<\/h2>\nset :branch, ENV['BRANCH'] || 'main'\n\n<h2>Uygulaman\u0131n sunucuda da\u011f\u0131t\u0131laca\u011f\u0131 yol<\/h2>\nset :deploy_to, \"\/var\/www\/#{fetch(:application)}\"\n\n<h2>Sunucudaki Ruby versiyon y\u00f6netimi (rbenv veya rvm)<\/h2>\nset :rbenv_type, :user # Veya :system\nset :rbenv_ruby, '3.2.2' # Kulland\u0131\u011f\u0131n\u0131z Ruby versiyonu\nset :rbenv_path, \"~\/.rbenv\" # rbenv kurulum yolunuz\n\n<h2>Ortak dizinler ve dosyalar. Bunlar her yeni da\u011f\u0131t\u0131mda korunur.<\/h2>\n<h2>Hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131) buraya ekleyin.<\/h2>\nset :linked_files, %w{config\/database.yml config\/master.key config\/credentials\/production.key}\nset :linked_dirs, %w{log tmp\/pids tmp\/cache tmp\/sockets vendor\/bundle public\/system public\/uploads}\n\n<h2>Ka\u00e7 adet eski s\u00fcr\u00fcm\u00fcn saklanaca\u011f\u0131n\u0131 belirtir.<\/h2>\nset :keep_releases, 5\n\n<h2>Log seviyesi: :debug, :info, :warn, :error<\/h2>\nset :log_level, :info\n\n<h2>SSH agent forwarding'i etkinle\u015ftirin. Bu, sunucunun Git deposuna eri\u015fmek i\u00e7in<\/h2>\n<h2>yerel makinenizin SSH anahtarlar\u0131n\u0131 kullanmas\u0131na izin verir.<\/h2>\nset :ssh_options, {\n  forward_agent: true,\n  auth_methods: %w[publickey]\n}\n\n<h2>Puma sunucuya \u00f6zel ayarlar (e\u011fer capistrano-puma kullan\u0131yorsan\u0131z)<\/h2>\nset :puma_init_active_record, true\nset :puma_workers, 2\nset :puma_threads, [2, 8] # min, max\nset :puma_bind, \"unix:\/\/#{shared_path}\/tmp\/sockets\/puma.sock\"\nset :puma_state, \"#{shared_path}\/tmp\/pids\/puma.state\"\nset :puma_pid, \"#{shared_path}\/tmp\/pids\/puma.pid\"\nset :puma_access_log, \"#{shared_path}\/log\/puma.access.log\"\nset :puma_error_log, \"#{shared_path}\/log\/puma.error.log\"\n\n<h2>Da\u011f\u0131t\u0131m sonras\u0131 veritaban\u0131 ge\u00e7i\u015flerini \u00e7al\u0131\u015ft\u0131rmak i\u00e7in<\/h2>\nafter 'deploy:publishing', 'puma:restart' # Veya 'passenger:restart', 'unicorn:restart'\n<\/code><\/pre>\n<h4>Ad\u0131m 4: Ortama \u00d6zel Yap\u0131land\u0131rma (<code>config\/deploy\/production.rb<\/code>)<\/h4>\n<p>\u015eimdi \u00fcretim ortam\u0131na \u00f6zel ayarlar\u0131 yapal\u0131m. Staging i\u00e7in de benzer bir dosya olu\u015fturabilirsiniz.<\/p>\n<pre><code class=\"language-ruby\">\n<h2>config\/deploy\/production.rb<\/h2>\nserver 'your_production_server_ip_or_hostname', user: 'deploy', roles: %w{web app db}\n\nset :rails_env, :production # Rails ortam\u0131n\u0131 belirtir\nset :deploy_to, \"\/var\/www\/#{fetch(:application)}_production\" # Ortama \u00f6zel da\u011f\u0131t\u0131m yolu\n\n<h2>SSH portu farkl\u0131ysa<\/h2>\n<h2>set :ssh_options, { port: 2222 }<\/h2>\n<\/code><\/pre>\n<p><code>your_production_server_ip_or_hostname<\/code> k\u0131sm\u0131n\u0131 sunucunuzun IP adresi veya alan ad\u0131yla, <code>deploy<\/code> k\u0131sm\u0131n\u0131 ise sunucunuzdaki da\u011f\u0131t\u0131m kullan\u0131c\u0131n\u0131zla de\u011fi\u015ftirin. <code>roles<\/code> k\u0131sm\u0131, sunucunun hangi rolleri \u00fcstlendi\u011fini belirtir (web sunucusu, uygulama sunucusu, veritaban\u0131 sunucusu).<\/p>\n<p><strong>Pratik Bilgi:<\/strong> <code>linked_files<\/code> ve <code>linked_dirs<\/code> Capistrano&#8217;nun en \u00f6nemli \u00f6zelliklerinden biridir. Bu ayarlar sayesinde, <code>config\/database.yml<\/code> gibi sunucuya \u00f6zel veya hassas dosyalar ile <code>log<\/code>, <code>tmp<\/code>, <code>public\/uploads<\/code> gibi her da\u011f\u0131t\u0131m aras\u0131nda kalmas\u0131 gereken dizinler, her yeni s\u00fcr\u00fcmde yeniden olu\u015fturulmaz, bunun yerine <code>shared<\/code> dizininden sembolik olarak ba\u011flan\u0131r. Bu dosyalar\u0131 ve dizinleri <code>shared<\/code> dizinine manuel olarak ilk kez kopyalaman\u0131z gerekir.<\/p>\n<pre><code class=\"language-bash\">\n<h2>Sunucuda ilk kez da\u011f\u0131t\u0131mdan \u00f6nce<\/h2>\nmkdir -p \/var\/www\/my_rails_app_production\/shared\/config\n<h2>Kendi database.yml ve master.key dosyalar\u0131n\u0131z\u0131 sunucuya kopyalay\u0131n<\/h2>\nscp config\/database.yml deploy@your_server_ip:\/var\/www\/my_rails_app_production\/shared\/config\/database.yml\nscp config\/master.key deploy@your_server_ip:\/var\/www\/my_rails_app_production\/shared\/config\/master.key\n<h2>E\u011fer Rails 6+ kullan\u0131yorsan\u0131z, production.key'i de kopyalay\u0131n<\/h2>\nscp config\/credentials\/production.key deploy@your_server_ip:\/var\/www\/my_rails_app_production\/shared\/config\/credentials\/production.key\n<\/code><\/pre>\n<h3>Uygulama Da\u011f\u0131t\u0131m\u0131 ve Y\u00f6netimi<\/h3>\n<p>Yap\u0131land\u0131rma tamamland\u0131ktan sonra, uygulaman\u0131z\u0131 da\u011f\u0131tmaya haz\u0131rs\u0131n\u0131z.<\/p>\n<h4>\u0130lk Da\u011f\u0131t\u0131m<\/h4>\n<p>Uygulaman\u0131z\u0131 ilk kez da\u011f\u0131t\u0131rken, Capistrano gerekli t\u00fcm dizinleri olu\u015fturacak, depoyu klonlayacak, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyecek ve varl\u0131klar\u0131 \u00f6n derleyecektir.<\/p>\n<pre><code class=\"language-bash\">\ncap production deploy\n<\/code><\/pre>\n<p>Bu komutun ba\u015far\u0131yla tamamlanmas\u0131n\u0131n ard\u0131ndan, uygulaman\u0131z belirtilen sunucu yolunda \u00e7al\u0131\u015f\u0131yor olmal\u0131d\u0131r. Uygulama sunucunuzun (Puma, Nginx, Apache vb.) do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan ve Capistrano&#8217;nun ba\u015flatt\u0131\u011f\u0131 uygulamay\u0131 i\u015faret etti\u011finden emin olun.<\/p>\n<h4>Sonraki Da\u011f\u0131t\u0131mlar<\/h4>\n<p>Uygulaman\u0131zda de\u011fi\u015fiklikler yapt\u0131ktan sonra, yeni s\u00fcr\u00fcm\u00fc da\u011f\u0131tmak i\u00e7in ayn\u0131 komutu kullanman\u0131z yeterlidir:<\/p>\n<pre><code class=\"language-bash\">\ncap production deploy\n<\/code><\/pre>\n<p>Capistrano, sadece de\u011fi\u015fen dosyalar\u0131 \u00e7ekecek, gerekli g\u00fcncellemeleri yapacak ve uygulama sunucusunu yeniden ba\u015flatacakt\u0131r. Bu s\u00fcre\u00e7, uygulaman\u0131z\u0131n kesintisiz bir \u015fekilde g\u00fcncellenmesini sa\u011flar.<\/p>\n<h4>Geri Alma (Rollback)<\/h4>\n<p>Bir da\u011f\u0131t\u0131m\u0131n ard\u0131ndan bir sorunla kar\u015f\u0131la\u015f\u0131rsan\u0131z, Capistrano sayesinde kolayca \u00f6nceki \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">\ncap production deploy:rollback\n<\/code><\/pre>\n<p>Bu komut, <code>current<\/code> sembolik ba\u011flant\u0131s\u0131n\u0131 bir \u00f6nceki s\u00fcr\u00fcme \u00e7evirir ve uygulama sunucusunu yeniden ba\u015flat\u0131r. Veritaban\u0131 ge\u00e7i\u015fleri geri al\u0131nmaz, bu nedenle veritaban\u0131 \u015femas\u0131n\u0131 bozan bir de\u011fi\u015fiklik yapt\u0131ysan\u0131z, manuel olarak geri alman\u0131z gerekebilir.<\/p>\n<h4>Di\u011fer Faydal\u0131 Komutlar<\/h4>\n<ul>\n<li>\n        <strong>Da\u011f\u0131t\u0131m \u00d6ncesi Kontrol:<\/strong><\/p>\n<pre><code class=\"language-bash\">\ncap production deploy:check\n        <\/code><\/pre>\n<p>        Bu komut, sunucuda gerekli dizinlerin, izinlerin ve Git eri\u015fiminin olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.\n    <\/li>\n<li>\n        <strong>Uygulama Sunucusunu Yeniden Ba\u015flatma:<\/strong><\/p>\n<pre><code class=\"language-bash\">\ncap production puma:restart # Veya passenger:restart, unicorn:restart\n        <\/code><\/pre>\n<p>        Uygulaman\u0131z\u0131 manuel olarak yeniden ba\u015flatman\u0131z gerekti\u011finde kullan\u0131l\u0131r.\n    <\/li>\n<li>\n        <strong>Rails Konsoluna Ba\u011flanma:<\/strong><\/p>\n<pre><code class=\"language-bash\">\ncap production rails:console\n        <\/code><\/pre>\n<p>        Uzak sunucudaki uygulaman\u0131z\u0131n Rails konsoluna ba\u011flanman\u0131z\u0131 sa\u011flar.\n    <\/li>\n<li>\n        <strong>Sunucu Loglar\u0131n\u0131 \u0130zleme:<\/strong><\/p>\n<pre><code class=\"language-bash\">\ncap production log:tail\n        <\/code><\/pre>\n<p>        Uygulama loglar\u0131n\u0131 ger\u00e7ek zamanl\u0131 olarak izlemenizi sa\u011flar (<code>capistrano-log_with_tag<\/code> gem&#8217;i ile daha geli\u015fmi\u015f izleme m\u00fcmk\u00fcnd\u00fcr).\n    <\/li>\n<\/ul>\n<p><strong>Pratik \u0130pu\u00e7lar\u0131:<\/strong><\/p>\n<p>*   <strong>SSH Anahtarlar\u0131 ve <code>deploy<\/code> Kullan\u0131c\u0131s\u0131:<\/strong> Her zaman bir <code>deploy<\/code> kullan\u0131c\u0131s\u0131 olu\u015fturun ve bu kullan\u0131c\u0131ya <code>sudo<\/code> yetkisi vermeyin. Git deposuna eri\u015fim i\u00e7in SSH anahtarlar\u0131 kullan\u0131n ve yerel makinenizin anahtarlar\u0131n\u0131 sunucuya <code>ssh-copy-id<\/code> ile kopyalay\u0131n. <code>forward_agent: true<\/code> ayar\u0131, yerel makinenizin SSH anahtar\u0131n\u0131 sunucuda kullanman\u0131za olanak tan\u0131r.<br \/>\n*   <strong>Ortam De\u011fi\u015fkenleri:<\/strong> Hassas API anahtarlar\u0131 gibi ortam de\u011fi\u015fkenlerini do\u011frudan <code>deploy.rb<\/code> dosyas\u0131na yazmaktan ka\u00e7\u0131n\u0131n. Bunun yerine, <code>config\/master.key<\/code> veya <code>config\/credentials\/production.key<\/code> gibi Rails&#8217;in \u015fifreli kimlik bilgileri mekanizmas\u0131n\u0131 kullan\u0131n veya sunucu taraf\u0131nda <code>ENV<\/code> de\u011fi\u015fkenleri olarak ayarlay\u0131n.<br \/>\n*   <strong>Nginx\/Apache Yap\u0131land\u0131rmas\u0131:<\/strong> Capistrano yaln\u0131zca Rails uygulamas\u0131n\u0131 da\u011f\u0131t\u0131r ve \u00e7al\u0131\u015ft\u0131r\u0131r. Nginx veya Apache gibi bir web sunucusunu uygulaman\u0131za y\u00f6nlendirmek i\u00e7in manuel olarak yap\u0131land\u0131rman\u0131z gerekir. Genellikle web sunucusunun yap\u0131land\u0131rmas\u0131nda <code>current\/public<\/code> dizinini i\u015faret etmeniz gerekir.<br \/>\n*   <strong>Veritaban\u0131 Olu\u015fturma:<\/strong> \u0130lk da\u011f\u0131t\u0131mda veritaban\u0131 hen\u00fcz olu\u015fturulmam\u0131\u015fsa, <code>cap production rake db:create<\/code> komutunu manuel olarak \u00e7al\u0131\u015ft\u0131rman\u0131z gerekebilir.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p>Capistrano, Ruby on Rails uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m s\u00fcrecini otomatikle\u015ftirmek i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131nda, da\u011f\u0131t\u0131mlar\u0131 h\u0131zl\u0131, tutarl\u0131 ve g\u00fcvenilir hale getirerek geli\u015ftirme ekibinizin verimlili\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. \u0130lk ba\u015fta biraz \u00f6\u011frenme e\u011frisi olsa da, sundu\u011fu avantajlar bu \u00e7abaya de\u011ferdir.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<p><strong>S: Capistrano neden di\u011fer da\u011f\u0131t\u0131m ara\u00e7lar\u0131ndan daha iyi?<\/strong><\/p>\n<p>C: Capistrano, Rails ekosistemiyle derinlemesine entegre olmas\u0131, Ruby tabanl\u0131 olmas\u0131 ve g\u00fc\u00e7l\u00fc, esnek bir DSL (Domain Specific Language) sunmas\u0131 nedeniyle Rails uygulamalar\u0131 i\u00e7in do\u011fal bir se\u00e7imdir. Geri alma yetenekleri ve basit sunucu y\u00f6netimi, onu \u00f6zellikle cazip k\u0131lar.<\/p>\n<p><strong>S: Veritaban\u0131 \u015fifreleri ve API anahtarlar\u0131 gibi hassas bilgileri nas\u0131l y\u00f6netirim?<\/strong><\/p>\n<p>C: Bu t\u00fcr hassas bilgileri <code>config\/database.yml<\/code> ve <code>config\/master.key<\/code> gibi dosyalara yerle\u015ftirin ve bu dosyalar\u0131 <code>linked_files<\/code> array&#8217;ine ekleyin. Bu dosyalar Git deposunda saklanmamal\u0131, bunun yerine ilk da\u011f\u0131t\u0131mda <code>shared\/config<\/code> dizinine manuel olarak kopyalanmal\u0131d\u0131r. Rails 6+ kullan\u0131yorsan\u0131z, <code>config\/credentials\/production.key<\/code> dosyas\u0131n\u0131 da kullanabilirsiniz.<\/p>\n<p><strong>S: Da\u011f\u0131t\u0131m s\u0131ras\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan hatalar nelerdir ve nas\u0131l giderilir?<\/strong><\/p>\n<p>C:<\/p>\n<ul>\n<li><strong>SSH Ba\u011flant\u0131 Sorunlar\u0131:<\/strong> <code>deploy<\/code> kullan\u0131c\u0131s\u0131n\u0131n sunucuya SSH anahtarlar\u0131yla eri\u015febildi\u011finden emin olun. <code>ssh -vvv deploy@your_server_ip<\/code> komutuyla detayl\u0131 hata ay\u0131klama yapabilirsiniz.<\/li>\n<li><strong>\u0130zin Sorunlar\u0131:<\/strong> <code>deploy_to<\/code> dizinine ve alt dizinlerine <code>deploy<\/code> kullan\u0131c\u0131s\u0131n\u0131n yazma izni oldu\u011fundan emin olun.<\/li>\n<li><strong>Gem Y\u00fckleme Hatalar\u0131:<\/strong> Sunucudaki Ruby versiyonunun ve Bundler&#8217;\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun. <code>cap production deploy:check<\/code> komutu yard\u0131mc\u0131 olabilir.<\/li>\n<li><strong>Varl\u0131k (Asset) \u00d6n Derleme Hatalar\u0131:<\/strong> <code>RAILS_ENV=production bundle exec rake assets:precompile<\/code> komutunu yerel olarak \u00e7al\u0131\u015ft\u0131rarak hatalar\u0131 tespit edebilirsiniz. JavaScript \u00e7al\u0131\u015fma zaman\u0131n\u0131n (Node.js gibi) sunucuda kurulu oldu\u011fundan emin olun.<\/li>\n<li><strong>Veritaban\u0131 Yap\u0131land\u0131rma Hatalar\u0131:<\/strong> <code>shared\/config\/database.yml<\/code> dosyas\u0131n\u0131n do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan ve veritaban\u0131 kullan\u0131c\u0131s\u0131n\u0131n gerekli izinlere sahip oldu\u011fundan emin olun.<\/li>\n<\/ul>\n<p>Hata mesajlar\u0131n\u0131 dikkatlice okuyun ve <code>set :log_level, :debug<\/code> ayar\u0131n\u0131 ge\u00e7ici olarak kullanarak daha fazla bilgi edinin.<\/p>\n<p><strong>S: Birden fazla sunucuya da\u011f\u0131t\u0131m yapabilir miyim?<\/strong><\/p>\n<p>C: Evet, Capistrano&#8217;nun temel \u00f6zelliklerinden biridir. <code>config\/deploy\/production.rb<\/code> dosyan\u0131zda birden fazla <code>server<\/code> tan\u0131m\u0131 yaparak veya farkl\u0131 rollere sahip sunucular\u0131 belirterek bunu yapabilirsiniz.<\/p>\n<p><strong>S: Da\u011f\u0131t\u0131m sonras\u0131 \u00f6zel komutlar \u00e7al\u0131\u015ft\u0131rmak m\u00fcmk\u00fcn m\u00fc?<\/strong><\/p>\n<p>C: Kesinlikle! Capistrano&#8217;nun g\u00f6rev kancalar\u0131n\u0131 (hooks) kullanarak da\u011f\u0131t\u0131m s\u00fcrecinin farkl\u0131 a\u015famalar\u0131na \u00f6zel g\u00f6revler ekleyebilirsiniz. \u00d6rne\u011fin, <code>after 'deploy:publishing', 'my_custom_task'<\/code> gibi bir ifade ile uygulaman\u0131z yay\u0131nland\u0131ktan sonra \u00f6zel bir Rake g\u00f6revi \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi\nRuby on Rails uygulamalar\u0131 geli\u015ftirmek keyifli ve verimlidir, ancak uygulaman","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1342],"tags":[],"class_list":{"0":"post-38703","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ai","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi\" \/>\n<meta property=\"og:description\" content=\"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi Ruby on Rails uygulamalar\u0131 geli\u015ftirmek keyifli ve verimlidir, ancak uygulaman\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-05T18:41:38+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi\",\"datePublished\":\"2026-02-05T18:41:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/\"},\"wordCount\":1654,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"AI\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/\",\"name\":\"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-05T18:41:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi","og_description":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi Ruby on Rails uygulamalar\u0131 geli\u015ftirmek keyifli ve verimlidir, ancak uygulaman","og_url":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-05T18:41:38+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi","datePublished":"2026-02-05T18:41:38+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/"},"wordCount":1654,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["AI"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/","name":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-05T18:41:38+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/otomatik-ruby-on-rails-uygulama-dagitimlari-capistrano-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Otomatik Ruby On Rails Uygulama Da\u011f\u0131t\u0131mlar\u0131: Capistrano Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38703"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38703\/revisions"}],"predecessor-version":[{"id":38704,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38703\/revisions\/38704"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}