在学习mezzanine的过程中遇到了多site管理的问题。

本地服务器ip地址为192.168.0.105,端口为9000. 在浏览器中输入192.168.0.105可以正常访问网页。做了端口映射后通过域名(owenchenxy.vicp.io)访问站点则出现404错误。

图1 站点选择为owenchenxy.vicp.io时的page内容

图2  站点选择为192.168.0.105时的page内容

经过检查发现,如上图1,图2所示,站点分别为owenchenxy.vicp.io和192.168.0.105:9000时,page的内容不同。证明在浏览器中输入的域名导致mezzanine进入了不同的site。经过查阅相关信息,了解到mezzanine决定进入哪个站点的条件如下(原文链接:点击打开链接):

Here’s the list of checks in the pipeline, in order:

  1. The session variable site_id. This allows a project to include features where a user’s session is explicitly associated with a site. Mezzanine uses this in its admin to allow admin users to switch between sites to manage, while accessing the admin on a single domain.
  2. The domain matching the host of the current request, as described above.
  3. The environment variable MEZZANINE_SITE_ID. This allows developers to specify the site for contexts outside of a HTTP request, such as management commands. Mezzanine includes a custommanage.py which will check for (and remove) a --site=ID argument.
  4. Finally, Mezzanine will fall back to the SITE_ID setting if none of the above checks can occur.

因此,针对以上问题,我想到以下两种解决方法:

一.添加Site法:

  • step1:由上述第二条匹配规则“The domain matching the host of the current request, as described above.”,由浏览器输入的域名决定站点,因此可以在数据库的Site表中添加所输入域名的条目,可以在/admin界面中添加,也可以通过命令行添加:

(mezzanine) [root@192 mezzsite]# python manage.py shell  
Python 2.7.5 (default, Aug  4 2017, 00:39:18)   
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2  
Type "help", "copyright", "credits" or "license" for more information.  
(InteractiveConsole)  
>>> from django.contrib.sites.models import Site  
>>> Site.objects.create(pk=3, domain='owenchenxy.vicp.io', name='owenchenxy.vicp.io')  
<Site: owenchenxy.vicp.io>

  • step2:添加完site条目后,如图1,选择对应域名的site(owenchenxy.vicp.io),编辑其对应的内容,当然,仍然与192.168.0.105:9000站点的内容不同。

二.匹配SITE_ID法:
方法一虽然可以避免因域名不能对应站点导致页面无法访问,但并没有解决一个根本问题,试想,我们在开发过程中一直使用192.168.0.105:9000作为访问站点的域名,当部署到服务器后,需要使用域名(owenchenxy.vicp.io)来访问,如果使用方法一的话,岂不是要把192.168.0.105:9000上的内容全部在owenchenxy.vicp.io这个site上重新做一遍,而我们做端口映射的目的正是想要通过owenchenxy.vicp.io直接访问与192.168.0.105:9000相同的内容。因此,我们想到可以通过SITE_ID来进行匹配,直接进入192.168.0.105:9000的本地site。

  • step1:检查Site表中的条目,删除与域名匹配的条目(如果没有则跳过这步),也可以直接在/admin页面的sites里删除:

>>> Site.objects.get(pk=3)  
<Site: owenchenxy.vicp.io>  
>>> Site.objects.get(pk=3).delete()  
(3, {u'conf.Setting': 0, u'redirects.Redirect': 0, u'pages.RichTextPage': 1, u'core.SitePermi
ssion_sites': 0, u'sites.Site': 1, u'pages.Page': 1})

  • step2: 找到本地服务器对应的SITE_ID, 查看Django关于SITE_ID的说明点击打开链接,SITE_ID就是Site表中的ID字段:

=Sites
Settings for django.contrib.sites.  
SITE_ID
Default: Not defined  
The ID, as an integer, of the current site in the django_site database table. This is used so that application 
data can hook into specific sites and a single database can manage content for multiple sites.

运行下面命令找出SITE_ID:

>>> Site.objects.get(domain__icontains="192.168.").id  
2

  • step3:修改settings.py文件中的SITE_ID参数,使其与上一步找出来的ID相等(本例中为2)

#settings.py  
...  
SITE_ID = 2  
...

  • step4:清除浏览器缓存,重新尝试用域名访问站点,则这次可以直接访问到192.168.0.105:9000站点的内容了。

Mezzanine多site管理问题相关推荐

  1. [转]IIS7全新管理工具AppCmd.exe的命令使用

    IIS 7 提供了一个新的命令行工具 Appcmd.exe,可以使用该工具来配置和查询 Web 服务器上的对象,并以文本或 XML 格式返回输出. 下面是一些可以使用 Appcmd.exe 完成的任务 ...

  2. Mezzanine学习---使用自定义模板

    Mezzanine是基于Django的CMS(内容管理系统),关于如何在Mezzanine的后台管理中创建的页面如何使用自定义的模板,而非Mezzanine自带的Page,RichTextPage模板 ...

  3. IIS7的CMD指令

    AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下 使用命令行管理IIS 7.0时,需要使用IIS7.0提供的全新管理工具AppCmd.exe.AppC ...

  4. PloneBook中文版

    第一章 简介... 1 Plone是什么?... 1 什么是内容管理系统?... 1 为什么使用基于web的内容管理系统?... 1 什么是内容管理框架?... 1 什么是Zope?... 2 为什么 ...

  5. IIS的配置以及网站的添加

    参考:https://jingyan.baidu.com/article/ea24bc39ae3de8da62b331ce.html windows8 安装IIS 和 添加网站 分步阅读 Intern ...

  6. 软件测试之第九章 搭建Web服务器

    第九章 搭建 Web 服务器 一. Web 简介 1 网页 通过浏览器打开的任意一个页面(窗口). 本质上是服务器中的一个文件. 是使用如 html.asp.aspx.php.jsp.cgi 等语言编 ...

  7. Plone学习-PloneBook中文版

    PloneBook中文版 第一章 简介... 1 Plone是什么?... 1 什么是内容管理系统?... 1 为什么使用基于web的内容管理系统?... 1 什么是内容管理框架?... 1 什么是Z ...

  8. Office 365:如何删除和管理Microsoft Team (Office 365 Groups)Team Site

    博客地址:http://blog.csdn.net/shelleyliu0415 2016年年底,微软正式发布基于Office 365平台的一款高效提高团队沟通和交流的工具:Microsoft Tea ...

  9. Windows服务器管理(3)——IIS服务器误删了Default Web Site 网站 解决方法

     问题描述: IIS服务器下的网站误删除了,该如何恢复: 解决方案: 1.打开C:\inetpub\history,里面是IIS网站的配置文件,按照时间日期进行的备份,可以从这里进行恢复 2.打开20 ...

最新文章

  1. 记一次网络共享打印机故障
  2. msbuild FileSysExcludeFiles
  3. workerman连接mysql_workerman Mysql使用
  4. html中亮度怎么写,html – 使用CSS更改背景的亮度
  5. Python基础教程(三):运算符、条件语句
  6. Shell运算符及条件判断
  7. 1835财务报表分析
  8. python3 字符串方法
  9. CentOS 6.2 + CUPS + AirPrint for iOS
  10. 飞凌小课堂-OK3399-C linux双千兆网口方案-RTL8153
  11. 软件测试通过标准是什么?
  12. iPhone加码“独立王国” 有可能成摆设?
  13. Java毕业设计_智能快递柜的设计与实现
  14. d3js绘制y坐标轴_如何用D3绘制各类样式的x坐标轴
  15. 如何把微信删除的聊天记录恢复正常?你知道吗
  16. win10下解决编译环境find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer
  17. 宏定义 定义一年多少秒
  18. 专业计算机能力考试 技巧,计算机二级考试复习技巧
  19. 列线图工具_Nomogram
  20. 高防CDN和融合CDN的区别

热门文章

  1. Java(Spring boot)实现生成二维码
  2. 在Groovy中使用字符串
  3. win7 64位系统下 Logitech(罗技) M555b蓝牙鼠标断线解决办法
  4. 安利三个工具,教你如何把英语翻译成中文
  5. python中,print()多个数据逗号分隔,打印时会以空格分隔,如果不要空格可以使用{}占位符
  6. 某知名OA命令执行方法探索(续)
  7. PostgreSQL 11 preview - Surjective indexes - 索引HOT增强(表达式)update评估
  8. Opencv——图像的矩
  9. jsp两种注释格式的区别
  10. excel表格内容拆分_「职场百科书」—「实用小技巧」—(Excel表格拆分)