我已经使用AWS Elastic Beanstalk部署了Djnago应用程序。我添加了一些数据,并且一切正常。然后,我增加了MAX_LENGTH在model.py的CharField之一。我已经使用“ eb deploy”命令再次部署了该应用程序。但这并没有增加数据库中的字段长度。如果我尝试添加subject_id大于10,则会出现此错误:django.db.utils.DataError:值对于类型字符变化(10)而言过长
Model.py:
class Subject(models.Model):
#subject_id = models.CharField(max_length=10, blank=True)
subject_id = models.CharField(max_length=50, blank=True)
0001_initial.py:
#Generated by Django 3.0.4 on 2021-02-18 18:54
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('accounts', '0001_initial'),]
operations = [
migrations.CreateModel(
name='Subject',
fields=[('subject_id', models.CharField(blank=True, max_length=50)),],),]
我在.ebextensions / django_build.config文件中添加了迁移命令。迁移文件夹中的0001_initial.py文件显示更改。但是它不会在数据库中更新(AWS RDS postgresql)。我检查了postgresql数据库中的django_migrations表。它显示了当我第一次创建实例时发生的最后一次迁移。
我需要在现有数据库中更改主题模型的subject_id字段长度。任何帮助将不胜感激。
.ebextensions / django_build.config:
container_commands:
01_create_log_folder:
command: "mkdir -p log && chown webapp:webapp -R log"
02_source_env:
command: "source /etc/profile.d/sh.local"
leader_only: true
03_database_migrations:
command: "source /var/app/venv/*/bin/activate && python3 manage.py makemigrations --noinput && python3 manage.py migrate --noinput && deactivate"
leader_only: true
django_migrations表:
select * from django_migrations;
id | app | name | applied
----+-----------------+------------------------------------------+-----------------------
28 | fileupload | 0001_initial | 2021-01-22 11:42:40.726471+00
由于修改后的迁移与0001_initial
已应用的迁移具有相同的名称(),因此不会执行。您需要:
0002_new_migration
),以更改您在第一个迁移中创建的字段或者
要回滚所拥有的迁移,您需要通过SSH进入ELB实例:
Login via SSH - check your AWS console for specific instructions
然后运行以下命令重置accounts
迁移
source /opt/python/run/venv/bin/activate
source /opt/python/current/env
cd /opt/python/current/app
./manage.py migrate accounts zero
下一步部署时,您将accounts
从头开始创建模型,新的迁移将运行。
这与使用manage.py
和在本地反向迁移时没有什么不同migrate
,只不过是在远程实例上进行迁移。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句