文件上传和存储,它们与远程工作者一起处理

时间:2013-04-17 08:44:18

标签: python django ironmq

我的问题是关于Web应用程序架构。

我有一个网站,我的用户可以上传文件,我需要为这些文件创建一些报告给用户。当用户上传文件时,它存储在我托管网站的服务器上。存储在Django模型字段中的文件路径。工作者在另一台服务器上,我需要访问我的数据库并获取该文件。我知道如何使用django ORM本身没有URL和django的其他部分。

我的问题:如果我需要在另一台服务器上创建工作人员,我的网站使用不同的django模型,我需要将所有模型复制到每个工作人员中吗?

例如,一个worker proccess文件,它需要模型“Report”和“User”。其他工作人员执行其他操作并需要“用户”和“链接”模型。每当我在我的主网站上更改模型时,我需要在我的工作人员中更改相同的模型,不同的工作人员也可以拥有相同的重复模型。我认为从架构角度来看并不好。

有关如何组织我的网站和工作人员的任何建议?

3 个答案:

答案 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是个好主意,我更喜欢它而不是在不同生物之间分享模型