Menyimpan konten situs yang dapat diedit?

9

Kami memiliki situs web berbasis Django di mana kami ingin membuat beberapa konten (teks, dan logika bisnis seperti rencana harga) mudah diedit di rumah , jadi kami memutuskan untuk menyimpannya di luar basis kode. Biasanya alasannya adalah salah satu dari yang berikut:

  • Ini adalah sesuatu yang ingin diedit oleh orang-orang non-teknis . Salah satu contohnya adalah copywriting untuk sebuah situs web - pemrogram menyiapkan sebuah templat dengan teks yang standarnya adalah "Lorem ipsum ...", dan konten yang sebenarnya dimasukkan kemudian ke dalam basis data.

  • Ini adalah sesuatu yang ingin kita ubah dengan cepat, tanpa perlu menyebarkan kode baru (yang saat ini kita lakukan dua kali seminggu). Contohnya adalah fitur yang saat ini tersedia untuk pelanggan di berbagai tingkatan harga. Alih-alih meng-hardcoding ini, kami membacanya dari database.

Solusi yang dijelaskan itu fleksibel tetapi ada beberapa alasan mengapa saya tidak menyukainya.

  • Karena konten harus dibaca dari database, ada overhead kinerja .

    Kami mengurangi itu dengan menggunakan skema caching, tetapi ini juga menambahkan beberapa kompleksitas pada sistem.

  • Pengembang yang menjalankan kode secara lokal melihat sistem dalam keadaan yang sangat berbeda dibandingkan dengan cara kerjanya pada produksi. Tes otomatis juga menjalankan sistem dalam keadaan berbeda. Situasi seperti menguji fitur baru pada server pementasan juga menjadi lebih rumit - jika server pementasan tidak memiliki salinan baru-baru ini dari basis data, itu dapat secara tak terduga berbeda dari produksi.

    Kita dapat mengurangi itu dengan melakukan keadaan baru ke repositori sesekali (misalnya dengan menambahkan migrasi data), tetapi sepertinya pendekatan yang salah. Apakah itu?

Adakah cara terbaik untuk menyelesaikan masalah ini? Apakah ada pendekatan yang lebih baik untuk menangani konten yang saya abaikan?

hmp
sumber
2
Cara terbaik untuk menyelesaikan masalah seperti ini adalah dengan menghindari 'kelumpuhan analisis'. Cara apa pun yang Anda pilih untuk melakukan ini akan memiliki overhead, jangan menambahkan lebih banyak dengan menebak sendiri atau ketiga.
Nocturno
Berapa banyak tanggal yang kita bicarakan di sini? Sedikit kb, mb?
Amit Wadhwa

Jawaban:

5

Anda harus memikirkan konten yang dapat diedit sebagai fitur lengkap .

  • Beberapa kerumitan tambahan jelas dibutuhkan. Mungkin Anda dapat menyimpan sumber daya statis setelah diedit untuk menghindari kerusakan kinerja.
  • Konten adalah data, jadi itu bagian dari status sistem. Pengembang harus menghadapinya dengan berpikir bahwa pengguna dapat melakukan hampir semua yang diizinkan oleh UI Anda.
  • Jika pengujian otomatis bergantung pada status basis data, pengujian juga harus menetapkan status basis data (TestDataBuilders, fixture ...) sebelum dijalankan, atau membuatnya sebagai unit test (mungkin melalui mengejek).

Tetapi, alih-alih membuat konten dapat diedit, Anda bisa menjadikan orang teknis itu bagian dari alur pengembangan Anda. Alih-alih mengembangkan -> menyebarkan -> mengubah data, Anda bisa mengubah data -> mengembangkan -> menyebarkan. Mungkin Anda bisa meminjam beberapa ide dari platform blogging statis seperti Octopress .

juanignaciosl
sumber
0

Ini adalah tugas yang baik untuk DevOps Anda. :) Anda dapat melakukan hal berikut:

  1. Masukkan sumber daya yang dapat diedit dalam repositori artifact / VCS yang terpisah (saya akan menggunakan terminologi Git di sini).
  2. Laksanakan proses membangun dan penyebaran Anda sehingga sumber daya ini hanya akan ditarik dari repositori ke lokasi terpisah di server (Anda dapat membuat beberapa konvensi untuk lingkungan yang berbeda sehingga Anda tidak perlu mengonfigurasi lokasi ini secara terpisah untuk masing-masing).
  3. Ketika pengguna mengubah sesuatu di situs web, perubahan itu hanya disimpan ke file sumber daya. Repositori push to remote dijalankan secara tidak sinkron pada setiap perubahan.
  4. Untuk menerapkan perubahan apa pun, pengembang menonaktifkan fungsionalitas pengeditan dan menggabungkan perubahannya ke dalam repositori jarak jauh. Kemudian, saat produksi, ia menarik file yang digabungkan dari repo jarak jauh. Setelah itu, fungsionalitas pengeditan dapat diaktifkan kembali.

Memungkinkan untuk mengotomatiskan semuanya kecuali penggabungan dengan Chef atau alat lain, sehingga solusi ini bisa nyaman bagi pengguna, pengembang, dan SQA.

Ivan Gammel
sumber
0

Adakah cara terbaik untuk menyelesaikan masalah ini?

Kami memiliki situasi yang sama. Kami akhirnya menggunakan aplikasi Django berikut:

Ini tidak sempurna, tetapi memberi Anda semua yang Anda butuhkan:

  • orang non-teknis dapat mengedit,
  • tidak diperlukan penyebaran kode.
  • Jika Anda memerlukan kontrol versi, aplikasi pengembalian akan memberikan Anda hal itu.

Agar pengembang mengalami halaman yang sama seperti pada sistem produksi, jika itu merupakan persyaratan aktual, ekspor dari produksi ke pengembangan dan uji dengan menggunakan fixture.

Apakah ada pendekatan yang lebih baik untuk menangani konten yang saya abaikan?

Secara konseptual, saya pikir Anda berada di jalur yang benar. Tanyakan pada diri Anda apakah Anda perlu menerapkan solusi Anda sendiri, atau apakah Anda dapat hidup dengan semacam CMS. Flatpages adalah salah satu versi yang sangat sederhana. CMS yang lebih canggih tersedia.

miraculixx
sumber