【问题标题】:How to create a large website with several subdomains and sharing same models in Pyramid?如何在 Pyramid 中创建具有多个子域并共享相同模型的大型网站?
【发布时间】:2012-09-02 23:45:38
【问题描述】:

我正在构建一个包含多个域的电子商务网站:

www.example.com: main website which show all items
passport.example.com: this website handle everything related to users like ordering, user information management and so on
static.example.com: holding static contents
admin.example.com: for admin use

客户要求我建立三个网站(网站“静态”不需要应用程序来处理)并将它们放入三个服务器中。这些网站需要共享模型和模板。我应该建立三个项目吗?有没有更好的方法来处理 Pyramid 中的这种情况? 谢谢。

【问题讨论】:

  • 这些应用程序是否并行运行并修改相同的模型?在这种情况下,我会小心,因为你可能会遇到碰撞。您可能想查阅 SQLAlchemy 的有关线程和竞争条件的文档。如果这些应用程序使用相同的模型但不会出现冲突,那么您可能可以安全地将模型分别导入到每个应用程序中。如果交互性很高,我可能会构建一个应用程序(或解决所有冲突/冲突)
  • 我不想构建三个独立的应用程序...这很难部署和管理。所以我想知道如何在单个应用程序中解决这个问题......
  • 那么在这种情况下,您应该查看金字塔的子域和路由。您可以在此处找到有关 stackoverflow 的一些信息,但似乎记录不充分(尽管可能,我认为)
  • 你能告诉我更多关于这个的事情吗?谢谢

标签: python pyramid


【解决方案1】:

我这样做的方式是为我的模型创建一个单独的 python 包(你可能想为你的模板创建另一个包),我在每个项目的virtualenv 中python setup.py develop 它。另外,我通常将所有项目保存在同一个源代码控制存储库下,以确保部署时没有版本问题。通过在不同项目的 setup.py 的依赖项中使用版本号,您可能会得到相同的结果。

如果这对您来说听起来很新鲜,您可能想阅读http://guide.python-distribute.org/。

每个包都有它的setup.py 告诉包名和版本号,还有一个依赖列表。

【讨论】:

  • 这就是我现在正在做的......但是有没有更优雅的方式来做到这一点?如果我需要将这三个项目部署在具有不同子域的单个服务器中,我该怎么办?
  • 如果你想让一个应用程序重新组合所有其他应用程序,你可能想要使用 config.include() 将其他应用程序包含在主应用程序中。此外,要根据子域进行路由,可能有更好的方法,但您始终可以制作自己的自定义谓词,如 stackoverflow.com/questions/7607807/… 此处突出显示的那样。我不知道您的确切需求,但我不喜欢尝试制作一个可以完成所有工作的大型应用程序。我通常更喜欢将东西分开放在自己的包装中并单独提供。
  • yup.. 我已经听从了你的建议,做了三个应用程序......但是部署怎么样?我必须将它们全部部署在单个服务器上...
  • 如果你把每一个都放在像 nginx 这样的反向代理之后,它会根据子域将请求发送到好的应用程序。至于部署本身,我通常会制作一个部署脚本,当我想部署时运行。
  • 一个好的起点是像这里一样单独部署每个应用程序:docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/… 然后你可以开始改进你的部署,比如自动化东西、包依赖等。
猜你喜欢
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 2015-08-02
相关资源
最近更新 更多