Skip to content

Commit 2184d6d

Browse files
dilin-spmilind-shakya-sp
authored andcommitted
Set PeriodicTask.name max_length = 191 to avoid issues with MySQL indexes.
Add readme Add test settings Remove index related changes
1 parent d96675d commit 2184d6d

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

README.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,17 @@ pip command::
229229

230230
$ pip install https://github.com/celery/django-celery-beat/zipball/master#egg=django-celery-beat
231231

232+
Issues with mysql
233+
-----------------
234+
If you want to run ``django-celery-beat`` with MySQL, you might run into some issues.
235+
236+
One such issue is when you try to run ``python manage.py migrate django_celery_beat``, you might get the following error::
237+
django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 767 bytes')
238+
To get around this issue, you can set::
239+
DJANGO_CELERY_BEAT_NAME_MAX_LENGTH=191
240+
(or any other value if any other db other than MySQL is causing similar issues.)
241+
max_length of **191** seems to work for MySQL.
242+
232243
.. |build-status| image:: https://secure.travis-ci.org/celery/django-celery-beat.svg?branch=master
233244
:alt: Build status
234245
:target: https://travis-ci.org/celery/django-celery-beat

django_celery_beat/migrations/0001_initial.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from django.db import migrations, models
66
import django.db.models.deletion
7+
from django.conf import settings
78

89

910
class Migration(migrations.Migration):
@@ -71,8 +72,15 @@ class Migration(migrations.Migration):
7172
auto_created=True, primary_key=True,
7273
serialize=False, verbose_name='ID')),
7374
('name', models.CharField(
74-
help_text='Useful description', max_length=200,
75-
unique=True, verbose_name='name')),
75+
help_text='Useful description',
76+
max_length=getattr(
77+
settings,
78+
'DJANGO_CELERY_BEAT_NAME_MAX_LENGTH',
79+
200
80+
),
81+
unique=True,
82+
verbose_name='name'
83+
)),
7684
('task', models.CharField(
7785
max_length=200, verbose_name='task name')),
7886
('args', models.TextField(

django_celery_beat/models.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import timezone_field
77
from celery import schedules
88
from celery.five import python_2_unicode_compatible
9+
from django.conf import settings
910
from django.core.exceptions import MultipleObjectsReturned, ValidationError
1011
from django.core.validators import MaxValueValidator
1112
from django.db import models
@@ -248,8 +249,14 @@ class PeriodicTask(models.Model):
248249
"""Model representing a periodic task."""
249250

250251
name = models.CharField(
251-
_('name'), max_length=200, unique=True,
252-
help_text=_('Useful description'),
252+
_('name'),
253+
max_length=getattr(
254+
settings,
255+
'DJANGO_CELERY_BEAT_NAME_MAX_LENGTH',
256+
200
257+
),
258+
unique=True,
259+
help_text=_('Useful description')
253260
)
254261
task = models.CharField(_('task name'), max_length=200)
255262
interval = models.ForeignKey(

t/proj/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,4 @@
122122
# https://docs.djangoproject.com/en/1.9/howto/static-files/
123123

124124
STATIC_URL = '/static/'
125+
DJANGO_CELERY_BEAT_NAME_MAX_LENGTH = 191

0 commit comments

Comments
 (0)