Przechowujesz edytowalną treść witryny?

9

Mamy stronę internetową opartą na Django, dla której chcieliśmy, aby niektóre treści (tekst i logika biznesowa, taka jak plany cenowe) były łatwe do edycji we własnym zakresie , dlatego postanowiliśmy przechowywać je poza bazą kodu. Zwykle przyczyną jest jedna z następujących przyczyn:

  • To coś, co ludzie nietechniczni chcą edytować. Jednym z przykładów jest copywriting strony internetowej - programiści przygotowują szablon z tekstem domyślnie „Lorem ipsum ...”, a rzeczywista treść jest później wstawiana do bazy danych.

  • Jest to coś, co chcemy móc szybko zmieniać, bez potrzeby wdrażania nowego kodu (co obecnie robimy dwa razy w tygodniu). Przykładem mogą być funkcje dostępne obecnie dla klientów na różnych poziomach cen. Zamiast na stałe je odczytywać z bazy danych.

Opisane rozwiązanie jest elastyczne, ale istnieje kilka powodów, dla których mi się nie podoba.

  • Ponieważ zawartość należy odczytać z bazy danych, występuje narzut związany z wydajnością .

    Łagodzimy to za pomocą schematu buforowania, ale powoduje to również pewną złożoność systemu.

  • Programiści, którzy uruchamiają kod lokalnie, widzą system w znacznie innym stanie niż jego działanie w środowisku produkcyjnym. Zautomatyzowane testy ćwiczą także system w innym stanie. Sytuacje takie jak testowanie nowych funkcji na serwerze pomostowym również stają się trudniejsze - jeśli serwer pomostowy nie ma najnowszej kopii bazy danych, może nieoczekiwanie różnić się od produkcji.

    Możemy to złagodzić, od czasu do czasu zatwierdzając nowy stan w repozytorium (np. Dodając migracje danych), ale wydaje się, że to niewłaściwe podejście. Czy to jest

Wszelkie pomysły, jak najlepiej rozwiązać te problemy? Czy istnieje lepsze podejście do obsługi treści, które pomijam?

hmp
źródło
2
Najlepszym sposobem rozwiązania takich problemów jest uniknięcie „paraliżu analizy”. Jakikolwiek sposób, w jaki to zrobisz, będzie miał narzut, nie dodawaj więcej, zgadując.
Nocturno
O jakiej dacie stanu mówimy tutaj? Kilka kilogramów, megs?
Amit Wadhwa

Odpowiedzi:

5

Powinieneś pomyśleć o treści edytowalnej jako pełnej funkcji .

  • Pewna dodatkowa złożoność jest oczywiście potrzebna. Może po edycji można zapisać zasób statyczny, aby uniknąć pogorszenia wydajności.
  • Treść to dane, więc jest częścią stanu systemu. Programiści muszą sobie z tym poradzić, myśląc, że użytkownicy mogą zrobić prawie wszystko, na co pozwala im interfejs użytkownika.
  • Jeśli automatyczne testy opierają się na stanie bazy danych, testy muszą również ustawić stan bazy danych (TestDataBuilders, urządzenia ...) przed uruchomieniem lub wykonać testy jednostkowe (być może poprzez kpinę).

Ale zamiast uczynić treść edytowalną, możesz sprawić, że osoby techniczne będą częścią twojego rozwoju. Zamiast rozwijać -> wdrażać -> modyfikować dane, możesz zmieniać dane -> rozwijać -> wdrażać. Może mógłbyś pożyczyć kilka pomysłów od statycznych platform blogowych, takich jak Octopress .

juanignaciosl
źródło
0

To dobre zadanie dla twoich DevOps. :) Możesz wykonać następujące czynności:

  1. Umieść edytowalne zasoby w osobnym repozytorium artefaktów / VCS (użyję tutaj terminologii Git).
  2. Zaimplementuj proces kompilacji i wdrażania, aby zasoby te zostały po prostu wyciągnięte z tego repozytorium do osobnej lokalizacji na serwerze (możesz ustanowić pewne konwencje dla różnych środowisk, aby nie trzeba było konfigurować tej lokalizacji osobno dla każdego).
  3. Gdy użytkownik zmienia coś na stronie internetowej, zmiana jest po prostu zapisywana w pliku zasobów. Przekaż do zdalnego repozytorium jest wykonywany asynchronicznie przy każdej zmianie.
  4. Aby wdrożyć wszelkie zmiany, programista wyłącza funkcję edycji i łączy swoje zmiany w zdalne repozytorium. Następnie podczas produkcji pobiera scalone pliki ze zdalnego repozytorium. Następnie funkcję edycji można ponownie włączyć.

Możliwe jest zautomatyzowanie wszystkiego oprócz połączenia z Chef lub innym narzędziem, dzięki czemu to rozwiązanie może być wygodne zarówno dla użytkowników, programistów, jak i SQA.

Ivan Gammel
źródło
0

Wszelkie pomysły, jak najlepiej rozwiązać te problemy?

Mieliśmy tę samą sytuację. Skończyło się na użyciu następujących aplikacji Django:

Nie jest idealny, ale zapewnia wszystko, czego potrzebujesz:

  • osoby nietechniczne mogą edytować,
  • wdrożenie kodu nie jest konieczne.
  • Jeśli potrzebujesz kontroli wersji, aplikacja do konwersji da ci to.

Aby programiści mogli korzystać z tych samych stron, co w systemie produkcyjnym, jeśli jest to rzeczywiste wymaganie, wyeksportuj z produkcji do rozwoju i przetestuj za pomocą urządzeń.

Czy istnieje lepsze podejście do obsługi treści, które pomijam?

Pod względem koncepcyjnym myślę, że jesteś na dobrej drodze. Zadaj sobie pytanie, czy musisz wdrożyć własne rozwiązanie, czy możesz żyć z jakimś systemem CMS. Flatpages to jedna bardzo prosta wersja tego. Dostępne są bardziej wyrafinowane CMS .

miraculixx
źródło