Merge branch 'disable-makemigrations' into 'master'
Fix #685: Disable makemigrations in production and misleading message when running migrate See merge request funkwhale/funkwhale!568
This commit is contained in:
commit
4bfb169114
|
@ -0,0 +1,22 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.management.base import CommandError
|
||||||
|
from django.core.management.commands.makemigrations import Command as BaseCommand
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
def handle(self, *apps_label, **options):
|
||||||
|
"""
|
||||||
|
Running makemigrations in production can have desastrous consequences.
|
||||||
|
|
||||||
|
We ensure the command is disabled, unless a specific env var is provided.
|
||||||
|
"""
|
||||||
|
force = os.environ.get("FORCE") == "1"
|
||||||
|
if not force:
|
||||||
|
raise CommandError(
|
||||||
|
"Running makemigrations on your Funkwhale instance can have desastrous"
|
||||||
|
" consequences. This command is disabled, and should only be run in "
|
||||||
|
"development environments."
|
||||||
|
)
|
||||||
|
|
||||||
|
return super().handle(*apps_label, **options)
|
|
@ -0,0 +1,29 @@
|
||||||
|
from django.core.management.commands.migrate import Command as BaseCommand
|
||||||
|
|
||||||
|
|
||||||
|
def patch_write(buffer):
|
||||||
|
"""
|
||||||
|
Django is trying to help us when running migrate, by checking we don't have
|
||||||
|
model changes not included in migrations. Unfortunately, running makemigrations
|
||||||
|
on production instances create unwanted migrations and corrupt the database.
|
||||||
|
|
||||||
|
So we disabled the makemigrations command, and we're patching the
|
||||||
|
write method to ensure misleading messages are never shown to the user,
|
||||||
|
because https://github.com/django/django/blob/2.1.5/django/core/management/commands/migrate.py#L186
|
||||||
|
does not leave an easy way to disable them.
|
||||||
|
"""
|
||||||
|
unpatched = buffer.write
|
||||||
|
|
||||||
|
def p(message, *args, **kwargs):
|
||||||
|
if "'manage.py makemigrations'" in message or "not yet reflected" in message:
|
||||||
|
return
|
||||||
|
return unpatched(message, *args, **kwargs)
|
||||||
|
|
||||||
|
setattr(buffer, "write", p)
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
patch_write(self.stdout)
|
|
@ -0,0 +1 @@
|
||||||
|
Disable makemigrations in production and misleading message when running migrate (#685)
|
Loading…
Reference in New Issue