Skip to content
This repository has been archived by the owner on Jun 16, 2021. It is now read-only.

Geliştirme sürecinde db:seed adımının hızlanması sağlanmalı #778

Closed
4 tasks done
roktas opened this issue Feb 10, 2019 · 6 comments
Closed
4 tasks done

Geliştirme sürecinde db:seed adımının hızlanması sağlanmalı #778

roktas opened this issue Feb 10, 2019 · 6 comments
Assignees

Comments

@roktas
Copy link
Member

roktas commented Feb 10, 2019

Bu özellik bir problemle mi ilgili? Lütfen detaylıca açıklayınız:

Geliştirme aşamasında bin/rails db:seed çok uzun sürüyor ve sıklıkla hata veriyor (500 Internal Server Error). Hızlandırmanın bir yolunu bulmalıyız.

Sizin çözümünüz:

Dış servislerden çektiğimiz seed verisinin kaydedilerek tekrar kullanılabilmesi sağlanmalı. Verinin dökümünü almak için bir Gem var. Başarıyla tamamlanan bir db:seed adımından sonra bu Gem yoluyla verinin dökümünü alıp gelecekte tekrar kullanalım.

Diğer alternatifler:

Xokul düzeyinde bir çözüm daha sağlıklı olur veya en azından bu çözümü daha etkin kılar.

Katkı sağlama:

  • Evet, bu iş kaydının bana atanmasını istiyorum.

Kontrol listesi

  • İş kaydınızın başlığı kurallara (sadece ilk harf büyük, emir kipinde problem cümlesi vb.) uygun mu?
  • Katkı sağlama dokümanını okudunuz mu?
  • Öneriniz ile alakalı açık olarak bekleyen bir issue veya pull request olmadığından emin misiniz?
@roktas roktas self-assigned this Feb 10, 2019
@msdundar
Copy link
Contributor

yaml_db'de bir alternatif olabilir.

@roktas
Copy link
Member Author

roktas commented Feb 10, 2019

seed_dump pek yürümedi maalesef. Sorun şu: dump edilen seed verisinde AR associationları dikkate alınmadan alfabetik model sırasıyla veri üretiliyor. Bu da her türlü validasyon hatasına yol açıyor. Çözüm olarak topolojik sıralama gerekiyor: rroblak/seed_dump#102. Fakat bu PR ile yaptığım denemelerde büyük ölçüde ilerleme kaydetmekle birlikte yine de hataları sıfırlayamadım. Bu PR hala kabul edilmemiş çünkü Gem'in özgün yazarı da üzerinde çalışıyor (bk topo-sort-models dalı).

Sonuç olarak seed_dump yöntemini şimdilik rafa kaldırdım (aslında kafamda bir çözüm var ama uğraşmak istemiyorum). Dediğin gibi yaml_db'ye bakacağım.

Bir de https://github.com/zdennis/activerecord-import var, hatırlarsan konuşmuştuk bunu. Xokul fetch'leri bir yana her kayıt için SQL insertleri de yavaş (bk. statik unit verisinden yapılan seed). Belki başka bir iş kaydında buna da el atsak güzel olacak.

@roktas
Copy link
Member Author

roktas commented Feb 10, 2019

Arşivlenmesi için yazayım. Şöyle bir db:seed:cached task'ı yazdım (lib/tasks/database.rake içinde):

namespace :db do
  namespace :seed do
    desc 'Seed database through a seed cache'
    task :cached do
      cache = File.join(ENV['LOCAL_CACHE_DIR_MISC'] || Rails.root.join('tmp'), 'seeds.rb')
      unless File.exist? cache
        FileUtils.mkdir_p File.dirname(cache)
        begin
          Rake::Task['db:seed'].invoke
        rescue SystemExit => err
          warn "Task db:seed aborted with #{err.status}; proceeding anyway."
        ensure
          Rake::Task['db:seed:dump'].invoke("FILE=#{cache}")
        end
      end
      load cache
    end
  end
end

(Bu task'ın bugları var, daha geliştirilmesi lazım, sadece ana fikir)

@msdundar
Copy link
Contributor

msdundar commented Feb 10, 2019

activerecord-import'u denedim, ancak çok riskli olduğunu görünce vazgeçtim. Bu araç kullandığımız validasyonları, database constraint'leri ve bu aracın kendi çalışma mantığını çok detaylı bilmeyen bir geliştiricinin elinde çok tehlikeli bir şeye dönüşebilir. Özellikle bir takım constraint'leri desteklememesi ve varsayılan olarak bir takım validasyonları es geçmesi bu tehlikenin nedenleri. Ek olarak biz birbiriyle ilişkili verileri import ettiğimiz için daima bazı verilerin bir diğerinden önce import edilmesi gerekiyor, dolayısıyla bulk olayından tam anlamıyla yararlanamıyoruz. Denemelerimde 5 dakika süren bir seed işlemini 3 dakika civarına düşürebilmiştim, ancak alınan risk, harcanan zaman, dikkat edilmesi gereken hassas durumlar vs. göz önünde bulundurulunca bundan vazgeçtim.

@roktas
Copy link
Member Author

roktas commented Feb 10, 2019

Bu seed_dump'ta da "sürdürülebilirlik" sorunları var. Fazla "hack" kokusu geliyor. Yaml_db daha "helal" gibi görünüyor. Veritabanına kaydedilenden hareket etmek yerine veri basılırken cache'lemek daha "helal" görünüyor bana.

@roktas
Copy link
Member Author

roktas commented Feb 11, 2019

Planladığım sonucu alamadığımdan "planlanmamış" yapıyorum bunu. Daha sonra bakacağım.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants