Django开源项目mezzanine迁移SAE分享

迁移完成Deml: http://mezzanine.sinaapp.com/



经历了长达两个多月的排队之后,终于审批通过,确实激动了一把。(两个月太长了........)

不知咋的想搞个blog试试,但是纠结于自个审美不行,前端搞不定,哎,找个现成的

然后就开始在网上寻找

期间找到很多很酷的项目,不过大都是php的,有些基于python的 web框架的,也是很长一段时间没人维护了...........

终于,在google大神帮助下,找到一个很给力的作品


官方网址:http://mezzanine.jupo.org/

Demo:http://mezzanine.jupo.org/blog/?device-time=133873453433

文档:http://mezzanine.jupo.org/docs/

github:https://github.com/stephenmcd/mezzanine


昨天搞了一个下午

.....这个,都是我一个人点的.....囧

本地调试环境没有,只能通过调线上的了.....




水土不服,虽不需要大改,但是其中要注意的地方还是很多的

分享下过程和感受:

建议:一上来不要急着做,先把项目和sae的文档读下,吐槽下,sae文档也太"简洁"了.....

1. 确认并统一环境

首先,确认你要迁移项目所依赖各个包的版本,列出来

然后,看看SAE提供版本是否符合



Then,统一你的开发环境版本和将迁移项目依赖环境版本

这个我比较吃亏,我python装2.7,3.0    django1.3  迁移之前没统一,导致项目搞下来一堆环境导致的问题

无法运行,最后索性,清了原有的环境,重装了一套,直接pass了

环境很重要!很多莫名其妙的错误,哎,伤不起呀


2.确认项目在本地环境可以运行

本地跑不通,就不要指望到SAE能跑通了.......

这个依赖于你要迁移的项目,起码文档要去看一下的,了解安装过程,注意事项,如何配置等等

只要本地起来了,且没有问题了,便成功了一半

注意,此时数据库也建完了


3.迁移前处理:

因为迁移后,很多依赖的包在SAE下并没有,所以,你必须把依赖的模块包整个文件夹复制到你的项目目录下

找到包路径,一般是:C:\Python27\Lib\site-packages

寻找路劲的方法:

import module

print module.__path__

把需要模块复制到项目目录下,并删除这个位置的模块文件(我直接重命名),以保证依赖包用的是项目中的,而非默认安装路径的

你可以一个个确认,我一般是根据项目列的依赖一个个迁移,漏了报错了再回来补(一般不会)

搞完之后,你在本地就有了一个可以独立运行成功的版本


4.上传svn到SAE

上传之前,要改的几个地方  config.yaml  index.wsgi 自己创建

目录结构刚开始会是

project_dir_name

     -1

          -project_dir_name

          -config.yaml

          -index.wsgi

A.index.wsgi 

import os
import django.core.handlers.wsgi

import sae

os.environ['DJANGO_SETTINGS_MODULE'] = 'your_project_name.settings'

application = sae.create_wsgi_app(django.core.handlers.wsgi.WSGIHandler())


B. config.yaml  这里配置你使用的非默认包版本,例如我这里使用时django1.4

libraries:
- name: django
  version: "1.4"
  


C.修改数据库配置:

sae上需要开通应用的mysql,所以配置上会有不一致,修改settings.py

from os import environ
debug = not environ.get("APP_NAME", "") 
if debug:
    #LOCAL 
    db_name = "blog1"
    name = "root"
    pwd = "123456"
    host = "127.0.0.1"
    port = "3306"
else: 
    #SAE 
    import sae.const
    db_name = sae.const.MYSQL_DB     
    name = sae.const.MYSQL_USER   
    pwd = sae.const.MYSQL_PASS   
    host = sae.const.MYSQL_HOST    
    port = sae.const.MYSQL_PORT   
    host_s = sae.const.MYSQL_HOST_S 
  
DATABASES = {
    "default": {
        # Add "postgresql_psycopg2", "mysql", "sqlite3" or "oracle".
        "ENGINE": "django.db.backends.mysql",
        # DB name or path to database file if using sqlite3.
        "NAME": db_name,
        # Not used with sqlite3.
        "USER": name,
        # Not used with sqlite3.
        "PASSWORD": pwd,
        # Set to empty string for localhost. Not used with sqlite3.
        "HOST": host,
        # Set to empty string for default. Not used with sqlite3.
        "PORT": port,
    }
}

D.把你的数据库导入到sae

这里,只需要导出建表语句和数据语句,存到*.sql文件就成

其他库相关,drop table,lock等不要导出来,会造成导入错误的


好了,到这里,传上去再说,遇到问题再处理!!!


5.问题:

A.找不到第三方依赖模块:

蛋碎的问题,命名第三方的包就在那个地方,就是报找不到。。。。囧

解决方法,在settings.py  最后加入:

import os,sys
project_path = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, project_path)
把当前路径加入sys.path


B。无法访问到css,js等静态资源

这是另外一个问题,解决方法:把static往外挪一层目录

结构是




---------------------------------------------------------------------------------------------------

就这些,希望有帮助

整个历时近7个小时,打开网页2000+,网页自个点了500+,一路干掉问题无数,哎,最近google大神不给力啊,老抽风,百度又一如既往,凑合学着用bing了


项目迁移访问Demo地址:http://mezzanine.sinaapp.com/

目前啥都没有,纯原版结构(默认bootstrap的....),内容,布局,主题什么的都没搞

后续,没空的话,就整整搞个blog出来

有空给的话,就争取搞个类似sae上wordpress一键部署的东西。。。。话说装了wp试用了下,又卸掉了。。。。


The End!

2012-06-03














posted @ 2012-06-03 23:25  夏至冬末  阅读(293)  评论(0编辑  收藏  举报