无法安装 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 --fake? 注意:在上述工作之前,如果在之前的努力中以某种错误状态创建应用程序的表,则需要从数据库中手动删除它们。 【参考方案1】:

由于actstream 处理其通用外键的方式而出现此错误。 MySql 出现问题,因为它看到没有任何文本字段 指定长度。

可以通过将迁移 0003 设为无操作来修复此错误。

在actstream中的迁移0003_text_field_ids0004_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 数据库表的主要内容,如果未能解决你的问题,请参考以下文章

cad软件无法安装如何解决

Chrome浏览器无法打开,安装程序也无法启动不能重新安装,啥原因?

Windows无法完成安装怎么办?

win10安装遇到驱动无法安装怎么办?

WINDOWS无法完成安装,若要在此计算机上安装windows,请重新启动安装,请问这个怎么解决,谢谢!

Dreamweaver:无法更新菜单,将不会安装该扩展