无法安装 django-activity-stream 数据库表
Posted
技术标签:
【中文标题】无法安装 django-activity-stream 数据库表【英文标题】:Cannot get django-activity-stream database tables installed 【发布时间】:2012-08-12 13:41:31 【问题描述】:使用 django-south,是否可以在不应用所有先前迁移的情况下仅将表设置到最后、最新的配置?
我们对使用 3rd 方工具 (django-activity-stream) 很感兴趣,但在运行所有迁移时遇到了困难,原因不明(可能是有关特定字段的 mysql 问题) - 特别是迁移 003,它会引发错误
_mysql_exceptions.OperationalError: (1170, "BLOB/TEXT column 'object_id' used in key specification without a key length") " 我强烈怀疑避免迁移并直接使用当前架构可以避免这种情况。
不需要向后迁移的能力,只需要让我们立即进入当前架构,我不想破解包来处理这个问题。我似乎无法建立命令,或者这是否可能?
配置:
南 0.7.6、django 1.3.x、mysql 5.5.x、django-activity-stream 0.4.4
【问题讨论】:
我在 django 1.4 上运行迁移时看到同样的错误 非常抱歉,如果我错了,因为没有时间测试,但你为什么不能先执行 manage.py syncdb --all 然后 manage.py migrate由于actstream
处理其通用外键的方式而出现此错误。 MySql 出现问题,因为它看到没有任何文本字段
指定长度。
可以通过将迁移 0003 设为无操作来修复此错误。
在actstream中的迁移0003_text_field_ids
、0004_char_field_ids
中更改以下内容:
0003_text_field_ids.py:
-
删除
def forwards(self, orm)
、def backwards(self, orm)
中的所有内容,并在两者中写入pass
。
将TextField
更改为PositiveIntegerField
。
0004_char_field_ids.py:
-
在
def backwards(self, orm)
中,将TextField
全部更改为PositiveIntegerField
db.altercolumns()
。
这使得迁移 0003 成为一个 noop,使用前向和后向传递,并使模型的定义使用 PositiveIntegerFields
作为通用外键,因此它们保持与迁移 0001 离开它们时相同的状态。这样做,迁移 0004 可以从 PositiveIntegerFields
拾取到 varChars
。然后修复更改迁移 0004,因此向后迁移更改为 PositiveIntegerFields
而不是 TextFields
。
这有望解决您的问题。
【讨论】:
【参考方案2】:我不认为问题是由迁移引起的,即使syncdb
也会给你同样的结果。
出现错误是因为 MySQL 只能索引 BLOB 或 TEXT 列的前 N 个字符。因此,您必须有一个 TEXT 或 BLOB 类型的字段/列类型,并试图将其作为主键或索引。
如果没有长度值的完整 BLOB 或 TEXT,MySQL 将无法保证列的唯一性,因为它具有可变和动态大小。因此,当使用 BLOB 或 TEXT 类型作为索引时,必须提供 N 的值,以便 MySQL 可以确定键长度。
尝试解决此问题,然后尝试应用迁移,它应该可以正常工作。 是的,您可以应用任何迁移并跳过较旧的迁移,但我建议不要这样做,因为这不是应该使用南的方式。
希望我把事情说清楚了。
【讨论】:
以上是关于无法安装 django-activity-stream 数据库表的主要内容,如果未能解决你的问题,请参考以下文章
Chrome浏览器无法打开,安装程序也无法启动不能重新安装,啥原因?