更好的描述
问题
:如何组织
./manage migrate
-
我必须在客户机上创建django网站,让本地用户登录并在本地做一些事情。
-
还有一个带有大型django应用程序的服务器,它的用户在服务器上进行操作。
-
服务器django应用程序和客户机“justpython”应用程序已经建立了连接和传输数据的协议,完全是从服务器到客户机的。不是所有的表都被传输(因为不是所有的表都需要),有时只有一个表的结构在客户机上被强制执行,有时也是数据。
不,我必须在客户机上创建本地django网站
-
它自己的一组用户,一些配置文件(一个连接到本地用户)
-
-
共享表(从服务器复制,在客户机上纯只读,有时被共享协议覆盖)
-
本地身份验证
-
管理“仅本地”表的内容
-
-
将某些数据用于仅显示自此类“服务器副本表”的数据(有些数据将由这些本地表的外键链接)。
很难保证,那些复制的表不会做任何不正常的事情(只会增加长度,现有记录最多会修改一些布尔列,也许以后会添加更多字段,但不会删除或更改任何字段-无论是结构还是含义))
我应该如何构造我的“clientdjango应用程序”,使其可维护、与表的服务器副本共存(并与之一起工作)。
我可以创建我的应用程序与声明一些模型,迁移,复制“服务器模型”迁移
--fake
这一部分然后照常继续,但它将安装在更多的客户机上,并且共享表的结构稍后可能会添加一些我需要阅读的内容—所以另一部分
有没有一种方法,可以进行一些迁移——默认情况下是假的,这样它就不会真正迁移,但不会以未填充的形式提供(如果那些模型会改变的话)?或者我只需将所有此类迁移命名为“0007\u PLEASE\u false\u ME”,然后每次在每个客户机上手动完成?或者它需要完全不同的访问权限?
我甚至可以将模型更改请求发送给“服务器”人员,以便将其合并到他们的应用程序中型号.py把它按成“只更新结构”
我可以把他们的models.py 如果它改变了,我也会。
我仍然不确定,我的OneToOne用户配置文件将如何在服务器上工作,那里有很多已经建立的用户和无配置文件模型。。。
Djago版本在服务器和客户端(1.10)上是相同的,所有表都是MyISAM。
编辑
-
修改首先进入服务器(将值填充到表中),然后将表传输到客户机,然后客户机得到SW update,后者使用新特性(因此每次都以旧方式或新方式使用完整的新数据),服务器使用django,客户机使用纯SQL
select name,filename, volume from themes where active=1
-
... AND plaing_allowed=1
-
用于数据库传输的API非常稳定(即使有点慢),通过SSH传输某种形式的TXT/XML数据(很多时候客户端没有其他连接可用)-首先是表描述,然后按顺序更改每一行-传输顺序是这样构造的,在不影响客户工作能力的情况下,这可能随时被打断。客户机上的软件在数据库更新后,所以有(旧客户机,旧数据-工作)(旧客户机,新数据-一起作为以前的版本工作)(新客户机,新数据-作为新版本工作)
旧客户机simple忽略(不知道)新表/字段,并且缺少一些新函数(也缺少调用此类函数的方法),所以它可以工作,就像根本没有做任何更改一样。
同样,旧方法(服务器上的django和mysql,客户端上的python和mysql)可以可靠地工作多年。
并不是每次客户机-服务器连接都是可能的,那么客户机应该在“本地”处理旧数据,直到连接再次可用为止(有时在几个小时之后,有时在几个月之后)。
我的任务是创建新的django应用程序,该应用程序将在一些(可能是所有)客户机上发布,这基本上为现有模式添加了一些“本地特性”
-
有一些新的表格来放置一些计划和数据
-
有一些web界面,用户可以通过web浏览器直接登录到客户端(它本身是apache+django+mysql的小服务器)并在那里计划一些本地事件-这些事件不会在主服务器上反向传播,也不会修改“正式表”,只会读取可用的内容并制作“本地笔记”
-
这些“本地注释”然后使用客户机上已经存在的API在更多单独的任务上注意到它,这需要“现在和这里”完成-这样的API已经存在,并且由一些过时的应用程序(在用户PC/NB上运行)在本地使用,这些应用程序将被客户机上新的django应用程序的web接口所取代。
-
我们的目标是能够扩展web界面来使用一些特殊的“本地表”以及读取那些“正式发布”的表,并扩展本地API以允许更多的功能,本地API(在客户端上)只从表中读取数据并对其进行操作,而不修改数据库中的任何内容(本地API的新版本也应在本地表上读取,以获得更多功能)
我的问题是,如何开发客户端django应用程序,对于一些数据库模式的更新“只是偶尔在后台发生”。
已经存在的系统(针对不同的标准进行了优化)比新的部分要大得多,因此从头开始重新编写它是不可取的。此外,还有一些“不可更新的部分”,例如,旧的通信方式必须支持无论如何在新的版本,因为一些计算机完全超出我的能力范围依赖它。(但是通信协议是为了扩展而设计的,所以添加更多的信息没有什么大问题)
更好的描述
-
-
Master M运行Myslql+Django+Apache并有1个API(M-S)
-
主表有TA(1..)、TB(1..)、TC(1..)
-
-
M-S API传输表架构
(创建类表)用于所有TA和TB表(完整或更改)
-
对于TA表
-
-
Slave现在运行Mysql+旧程序,有2个api
-
-
M-S API(用于网络主机)
-
(基于XML的旧本地通信)
旧应用程序
)
-
主机(不定期,但足够频繁,如每天1-10倍)联系每个从机,并通过M-S forces数据库更新对其进行更新
-
-
Slave独立地制作自己的作品(主要是根据表TA中的一些提示播放音乐)(自己规划排列等)
-
旧应用程序
通过S-localapi,从机停止正在执行的操作并播放适当的消息,然后继续
-
S-localapi是由一些过时的封闭源代码应用程序操作的
旧应用程序
,应替换为
(见下文)
-
-
旧应用程序
在Windows下的用户计算机(完全不同于主计算机和从计算机)上运行,并有硬编码的XML字符串发送到从计算机
-
来自主设备M的大量信息与从设备S无关(主要是所有授权和用户,因为关于从设备的决定基于不同的标准,并且这里使用的TA表实际上是只读的)
-
所有这些工作了很多年,经过许多版本的变化,一个是太大了,不能在正常的时间重写。
新方法是创建和运行基于
django应用程序(+Apache)提供了比
旧应用程序
为此,它需要:
-
授权(与Master不同,但所有Master auth.*表都在TC组中,根本不传输,因此可以在Slave上本地重用)
-
-
它读取TA组的一些表(但只读取,不修改内容)
-
-
-
使用S-local API(并稍微扩展它—没问题)
质疑的解决方案:
-
复制主设备上TD表的模型,并让它们与TB表一起传输到从属设备(仅结构)
-
-
在上安装新版本
这种方式:
-
-
更新主机上的TD以与主机上的新版TD同步
并在主机上迁移
-
在从机上进行传输(因此必须有新版本)
-
新应用程序
关于奴隶和正义的使用
./manage.py migrate --fake
停止抱怨
M-S公司
API及其传输(只起作用,数据库中的默认值应用于现有记录/行的新字段),创建视图和模板(如果model表包含的字段多于model,则忽略这些字段)
这样,Master就不会以任何方式使用TD表/模型(没有接口,没有管理,只是在那里是空的),Slave将在外部与Master同步更新。型号.py两者的数据部分是相同的(可能是TD的主缺失函数和一些TA/TB表的从缺失方法)
问题
-
这样行吗(假迁移)
-
django在Master上是否需要(并自动管理)一些“系统”表,这些表需要传输(最终与数据一起)到从属服务器(可能与迁移所做的工作有关,或者与需要满足的表结构有关)型号.py(要求)
2.1. 这样的表是否被转移,甚至需要在从机上进行假迁移?(因为所有的迁移都在这些表中提到了,而且模型也很适合,所以我认为没有迁移)