我的问题是关于Web应用程序架构。
我有一个网站,我的用户可以上传文件,我需要为这些文件创建一些报告给用户。当用户上传文件时,它存储在我托管网站的服务器上。存储在Django模型字段中的文件路径。工作者在另一台服务器上,我需要访问我的数据库并获取该文件。我知道如何使用django ORM本身没有URL和django的其他部分。
我的问题:如果我需要在另一台服务器上创建工作人员,我的网站使用不同的django模型,我需要将所有模型复制到每个工作人员中吗?
例如,一个worker proccess文件,它需要模型“Report”和“User”。其他工作人员执行其他操作并需要“用户”和“链接”模型。每当我在我的主网站上更改模型时,我需要在我的工作人员中更改相同的模型,不同的工作人员也可以拥有相同的重复模型。我认为从架构角度来看并不好。
有关如何组织我的网站和工作人员的任何建议?
答案 0 :(得分:1)
您说您正在使用IronWorker,因此只需在.worker文件中包含每个工作人员所需的模型即可。例如,假设您有一个名为report_worker.py
的工作人员,需要“报告”和“用户”的工作人员指向report_worker.worker
文件中的每个人:
file '../models/user.py'
file '../models/report.py'
或者既然你正在使用Django,你可能拥有models.py中的所有模型,所以:
file 'models.py'
然后,当其中任何一个发生变化时,只需使用cli重新上载工作人员:
iron_worker upload report_worker
然后您可以使用与您的应用使用相同的模型。希望有所帮助!
有关.worker文件的更多信息:http://dev.iron.io/worker/reference/dotworker/
答案 1 :(得分:0)
为什么你真的需要在你的工人中使用完全相同的模型?您可以将工作程序设计为具有不同的模型,以便对数据执行自己的操作。只需为您的数据设计API,并从主站点单独访问它。
如果确实有必要,可以在多个项目中共享Django应用程序。所以你可以把一些通用代码放在一个单独的应用程序中(比如你的共享模型)并将它们放在sourcecontrol中。在主网站上进行更新后,您也可以轻松更新工作人员。
答案 2 :(得分:0)
有一些有趣的选择。
例如,您可以为部署过程添加额外的reupload workers
步骤。它保证
部署的应用程序和工作程序之间的一致性。
使用自己的(休息)api是个好主意,我更喜欢它而不是在不同生物之间分享模型