SyssonCommence par faire un git init dans ton /etc et commit tes configsJ'ai une copie, mais je ne sais pas dans quelle mesure ça suffit pour "tout remettre rapidement en état", cela dit
SyssonJ'espère aussi que tu as une backup journalière de la bdd, ce serait dommage que la prose des lexpagiens se perde à cause d'un rayon cosmique.Oui, heureusement
FabeÉventuellement, dépose tes sources sur un repo public, ça permettrait à "d'autres personnes" de jeter un oeil à tes bugs et donner un coup de main, à l'occasionJ'y pense de plus en plus. Je sais que la v4 "première édition" n'avait pas soulevé des foules y a 3-4 ans quand on suggérait que ça pourrait être participatif... mais c'est une idée qui me revient souvent, ne fut-ce que parce que contrairement à la v3, j'ai "confiance" dans le code cette fois-ci
Documentation pour une fonction de changement de statut pour les billetsShortcut function that provide a quick and dirty way to updateOu encore, même si la philosophie en Python est plutôt "Easier to Ask for Forgiveness than Permission".
the status of a post based on a given action.
def get_previous(self):
""" Return the previous post by date_published, only for
published post. """
try:
return BlogPost.published.filter(date_published__lt=self.date_published).order_by('-date_published')[0]
except IndexError:
pass
Bon en fait, y a pas grand chose de trop moche quand même dans le code. J'pense que le principal problème, c'est que ma maitrise de Django a beaucoup évolué pendant le dev, et donc certains trucs sont un peu mélangés (par exemple, les class-based-view où je mélange l'usage des vues classiques, des mixins, des vues builtins, etc. avec à chaque fois des hacks pour que ça corresponde à ce que je veux, alors que ça existe déjà ).
Ce message a été modifié 1 fois.
Dernière modification : 30 janvier 2015
à 14:56 par
Guybrush.
Guybrush - Aucun contrôle de version. Pour la v4, vu que j'ai codé ça en 2 semaines environ, je ne me suis pas encombré d'un git (j'utilisais bzr, d'ailleurs, pas git, pour mes autres projets). Ce n'est pas trop trop grave vu que je suis seul dev dessus, mais bon...Ça résoudrai ton soucis de déploiement, aussi, et ton système de serveur test.
Guybrush - Ma logique se situe au niveau des views, pas des modèles. Mauvaise habitude que j'ai prise en Django pour Lexpage, et qui rend l'implémentation d'une API difficile tant que je n'aurai pas réglé ce souci.Alors là, je vais me faire troller je sens, je devrai fermer ma mouille je le sens bien, mais ... c'est pas dans le controller qu'il faut caler la logique ? Le modèle servant "uniquement" à traiter la donnée.
SyssonCommence par faire un git init dans ton /etc et commit tes configs, j'ai l'impression qu'en 20 secondes tu vas réduire de 20 heures la restauration du lexpage le jour où ton serveur va crasher.Ça, c'est pas con. Un peu bricolage, mais pas con du tout.
GuybrushOui, heureusementHiiiiii !
J'ai bricolé un cron + logrotate pour sauver la db via un compte Dropbox (j'ai parlé de bricolage, hein )
GuybrushOk, ok... je vais y réfléchir (peut-être refactorer un peu tout ça avant quand même)Un projet qu'on ne réécrit pas entièrement plusieurs fois sous le fallacieux prétexte de "ah, mais je peux le refaire plus élégamment" n'est pas un projet auquel on tient !
TchouAlors, je ne suis pas une référence, je travaille aussi en solo, mais voilà mon workflow :Je crois que c'est une bonne idée, même si dans le cas du développement Python, l'environnement joue peu (une fois que ça tourne sous Gunicorn, le serveur web importe peu au final, sauf pour la gestion des fichiers statiques et des petites bizarreries que je n'utilise pas sur Lexpage). Donc cloner l'environnement de production n'est pas trop difficile (même version de Python + librairies, via Virtualenvwrapper). Il reste le cas de la database, où j'utilise SQLite en local, et MariaDB en prod. Y a quelques subtilités, mais dans l'absolu, les bugs qui y sont potentiellement liés sont rares et faciles à identifier (par exemple, le bug de la recherche par étiquette pour les billets qui fait appel à iregex ^^).
- développement et tests (pas unitaires, à la mano, oui, je sais, aussi, faudrait) sur un serveur de test, au plus proche de mon serveur de prod. Qui peut être une VM, dans certains cas (cas d'un serveur avec une config différente). Avec git. Une fois que j'ai une version publiable, je git push sur ...
- un dépot privé, crée via un git clone --bare (de mémoire)
- et mon serveur de prod. Une fois que j'ai une version fonctionnelle en test, je ssh sur le serveur de prod, je me place dans le répertoire, et je git pull dedans.
TchouMes fichiers de config sont dans le .gitignore et donc différents entre prod et test. Et les fichiers non fondamentaux (images et fichiers uploadés par exemple) sont dans le gitignore aussi.En général, je mets tout dans le git, sauf ce qui est privé (clé de chiffrement de l'application, password, etc.). Pour Lexpage, c'est "pire" car tout est dans mon fichier de settings pour l'environnement de prod. Je pense qu'il faudrait que je stocke ça dans une variable d'environnement sur le serveur, et que j'y accède via Python, comme ça je ne trimballe pas de choses sensibles via git le jour où j'y passe
TchouAlors là, je vais me faire troller je sens, je devrai fermer ma mouille je le sens bien, mais ... c'est pas dans le controller qu'il faut caler la logique ? Le modèle servant "uniquement" à traiter la donnée.Django est un peu différent et se définit plutôt comme un "MVT" : Modèle / Vue / Template. Django part du principe que le "controller", c'est Django et les différents middleware. De ce principe, on a :
TchouAlors, le smiley aurai pu être si la technique avait été "je m'envoie sur mon webmail", mais là c'pas glop quand même : si quelqu'un pirate le dropbox (ou a un accès sans pirater, genre c'est quelle nationalité dropbox ? ah !), il choppe la bdd, incluant la table users avec son champ (crypté certes).Je crois qu'il est plus facile d'avoir accès à la db directe qu'à Dropbox... Pour limiter la parano, je pourrai à la rigueur chiffrer les archives contenant la db avant de les envoyer. Cela dit, vos mots de passe sont hashés, salés et chiffrés avec la clé privée du Lexpage. Il n'est pas possible (enfin, pas envisageable plutôt) de déduire votre password en clair à partir de ces données, et si un accès non-autorisé devait avoir lieu sur Lexpage, il me suffirait de générer une nouvelle clé, déchiffrer et rechiffrer le hash avec une nouvelle clé et le souci est réglé.
TchouUn projet qu'on ne réécrit pas entièrement plusieurs fois sous le fallacieux prétexte de "ah, mais je peux le refaire plus élégamment" n'est pas un projet auquel on tient !Tout à fait
1996-2024 — Lexpage v4 — GPLv3 (sources)
page générée le 22 novembre 2024 à 07:16:47