【解决】SAE部署Django1.6+MySQL

终于可以舒口气了,今天大部分时间都在搞这个,很是蛋疼,网上资料良莠不齐,我不信这个之前没人做过,但是他们确实分享的不够好。

废话不多说,还是记录一下今天的工作吧。

1,装SVN

这个没什么好说的,去官网下下来,一路next装上而已,不过用SVN上传文件到SAE还是挺慢的,上传过程中我睡了一觉。

2,检出版本到本地

之前在SAE上尝试过部署,结果失败了,所以这次新开了版本,也就是版本2,用SVN检出到本地。

3,主要操作

从这里开始是重点!

刚检出版本2到本地的时候,2目录下只有config.yaml和index.wsgi两个文件,将本项目myenrich拷过来,注意目录结构,如图:

本地是这样的

首先忽略下图的db.sqlite3和sqlite3.exe,这俩是轻量级数据库,在SAE上用不着,那么上图的目录结构比下图多了两个文件夹:site-packages和static,为什么,下面来讲:

  • site-packages

目前SAE支持Django的默认版本是1.2.7,1.4也支持,但我的项目是基于1.6.5的,所以这里会麻烦一点,要自己把Django1.6.5的包上传。

自己建一个site-packages文件夹,位置如上图,然后去python安装位置(例如C:\Python27\Lib\site-packages)把Django包拷贝过来。

然后修改config.yaml和index.wsgi,如下(基本上是俩文件的完整代码,之所以说基本上算,是因为我的文件里还有其他代码,但是我认为它没影响,不是注释就是不起作用的代码):

#-- config.yaml -- #

name: myenrich
version: 2 libraries:
-name: django
version: "1.6"
#-- index.wsgi --#

import os
import sys root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(root, '.', 'site-packages')) import django.core.handlers.wsgi
import sae os.environ['DJANGO_SETTINGS_MODULE'] = 'myenrich.settings'
application = sae.create_wsgi_app(django.core.handlers.wsgi.WSGIHandler())

注意:

首先,这里的代码要自己根据自己的情况来改,我这就和网上略不同,因为目录结构的关系,我的site-packages和index.wsgi等都 在一个目录层次,那么我的sys.path.insert就这么写,如果不是这样的层次,那就需要改sys.path.insert()函数中 os.path.join(roo, '*', 'site-packages')的"*"部分!这个灵活变动很重要,不然找不到路径的话啥都白搭。

另外,root和sys.path.insert做完之后才能import django,不然连django都找不到,import谁去。

最后,os.environ['DJANGO_SETTINGS_MODULE'] = ‘myenrich.settings’,这里的myenrich是自己的项目名,或许也跟目录结构有关,这点可以从图中看出。

其实我把2/myenrich/wsgi.py也改了,但不知道它起作用了没,贴代码吧

import os
import sys root = os.path.dirname(__file__) sys.path.insert(0, os.path.join(root, '..', 'site-packages'))
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myenrich.settings") # This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application() # Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)

做到这一步的话,应该是可以跑起来了,但是其他问题来了,虽然能跑起来,css和js却失效了,通过审查元素发现链接错了。

哦,对了,下午配置的时候出现找不到django.middleware.clickjacking的问题,我不明白这是干什么用的,所以我直接在2/myenrich/settings.py里把它注释掉了。

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
#'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
  • static

之前在本地的时候没问题,SAE上找css和js的方法和本地不同么,反正按它的意思来改,所以我把static文件夹给提了出来,放在根目录下。

4,配置数据库

最后一步配置数据库,本地原来就是使用Django和MySQL的话这步问题其实不大。

用WAMP的phpMyAdmin进去把项目数据库导出成sql格式,有个插曲,WAMP一开始绿不了,原来是因为之前做项目的时候IIS开了,占用了80端口,把IIS关了就好了。

配置数据库只要是要改2/myenrich/settings.py文件!

A.把以下代码加到头部

import os.path
import sae.const
from os import environ
#debug = not environ.get("APP_NAME", "")
#if debug:
# MYSQL_DB = 'myenrich'
# MYSQL_USER = 'root'
# MYSQL_PASS = ''
# MYSQL_HOST_M = '127.0.0.1'
# MYSQL_HOST_S = '127.0.0.1'
# MYSQL_PORT = '3306'
#else:
#SAE
import sae.const
MYSQL_DB = sae.const.MYSQL_DB
MYSQL_USER = sae.const.MYSQL_USER
MYSQL_PASS = sae.const.MYSQL_PASS
MYSQL_HOST_M = sae.const.MYSQL_HOST
MYSQL_HOST_S = sae.const.MYSQL_HOST_S
MYSQL_PORT = sae.const.MYSQL_PORT

这里我直接就不让它调试了就```

B.修改DATABASES字段

DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# 'ENGINE': 'django.db.backends.mysql',
# 'NAME': 'myenrich',
# 'USER': 'root',
# 'PASSWORD': '',
# 'HOST': '',
# 'PORT': '3306',
'ENGINE': 'django.db.backends.mysql',
'NAME': MYSQL_DB,
'USER': MYSQL_USER,
'PASSWORD': MYSQL_PASS,
'HOST': MYSQL_HOST_M,
'PORT': MYSQL_PORT,
}
}

前两行是之前用sqlite3的代码,中间的注释部分是本地用MySQL的方法,SAE用底下没注释的。

这里的NAME啊USER啊很明显用的是步骤A定义的变量,网上的教程居然有类似'NAME': 'MYSQL_DB'的写法,刚开始没注意吃亏了。

到这里代码就改完了,到SAE对应项目下的“服务管理”—“MySQL”—“管理MySQL”,把之前导出的sql文件导入进来就可以了。

-- 更新 2015-08-01

这里要注意,我用Django版本是1.8,其中默认建立的数据库中用到datetime是以datetime(6)这样的形式表示,而SAE上不支持datetime后跟括号,可能版本比较老。

因为我在本地phpMyAdmin导出sql脚本后要把datetime(6)改成datetime,这样才能顺利导入到SAE的mysql中。

用SVN同步修改,然后访问对应网址,应该就没有问题了。

配置过程很艰难,记录博客的时候不见得记得清每一步和犯下的所有错误,博客也只是一个参考而已,既然已经配出来了,我想最重要的还是配置过程中自己 的思考,而不是死板地按照网上的教程一步步下来,起码要知道它每一步的意义,要学会甄别并自己改正网上教程的错误,从迷雾中看见光芒。

SAE部署Django1.6+MySQL的更多相关文章

  1. 【解决】SAE部署Django1.6+MySQL

    终于可以舒口气了,今天大部分时间都在搞这个,很是蛋疼,网上资料良莠不齐,我不信这个之前没人做过,但是他们确实分享的不够好. 废话不多说,还是记录一下今天的工作吧. 1,装SVN 这个没什么好说的,去官 ...

  2. linux部署不同版本mysql

    测试环境部署过程中经常会遇到同一个服务器上部署两个不同版本的mysql数据库,在部署过程中也会有各种各样的问题,现将部署多版本mysql的方法总结如下: 1.下载mysql版本 http://down ...

  3. Python-Django Win7上使用Apache24和mod_wsgi部署Django1.11应用程序

    Win7上使用Apache24和mod_wsgi部署Django1.11应用程序 by:授客 QQ:1033553122 测试环境 win7 64 Django-1.11.4.tar.gz 下载地址: ...

  4. Windows解压安装mysql 5.7.24,并部署多个mysql服务

    mysql官网windows安装文档 https://dev.mysql.com/doc/refman/5.7/en/windows-installation.html 第一步,选择安装包   htt ...

  5. RHEL6 最小化系统 编译安装部署zabbix (mysql)

    RHEL6 最小化系统 编译安装部署zabbix (mysql)官方说明详细见:https://www.zabbix.com/documentation/4.0/manual/installation ...

  6. docker 部署 nginx+php+mysql

    系统:centos7 使用root账户 开放80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 安装docker yum ins ...

  7. CentOS7下部署java+tomcat+mysql项目及遇到的坑

    CentOS 7 下安装部署java+tomcat+mysql 前置:CentOS7安装:https://jingyan.baidu.com/article/b7001fe1d1d8380e7382d ...

  8. docker部署多个mysql容器,并使用java连接

    测试springboot多个数据源配置时,需要安装多个mysql容器,由于资源限制,当前只有一台虚拟机,如果在一台机器上安装多个mysql实例,是可以的,但步骤比较繁琐,使用docker来安装MySQ ...

  9. Centos7.6部署rsyslog+loganalyzer+mysql日志管理服务器

    参考来自: the_script :https://yq.aliyun.com/articles/675198 名山.深处:https://www.cnblogs.com/skychenjiajun/ ...

随机推荐

  1. mysql5.6与mysql5.5不同

    1.编译阶段 要明白with与without的区别,选项值分1和0,或者对应为on或off,代表支持与不支持:with的1(on)与without的0(off)是同样的,with的0(off)与wit ...

  2. Vue项目上线后刷新报错404问题(apache,nginx,tomcat)

    转自:https://www.cnblogs.com/sxshaolong/p/10219527.html 很简单,需要 服务器端 加个配置文件,然后 重启服务就好了,记住一定要 重启服务,否则无效!

  3. 谷歌模拟手机和真机上显示的各个机型的 dpi--和高度

    **以下数据尚未经过严密测试.待日后工作中再试** var dpi = window.devicePixelRatio;//获取屏幕分辨率 alert("dpi为:"+dpi); ...

  4. git clone 提示输入git@xxx的密码

    如下: suse:~/ecox # git clone git@vcs.in.ww-it.cn:ecox/ecox.git 正克隆到 'ecox'... git@vcs.in.ww-it.cn's p ...

  5. 关于命名空间namespace

    虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits).接口.函数和常量. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方 ...

  6. SDKMAN 软件开发工具包管理器

    SDKMAN 是用来在类Unix 系统中管理多个版本的开发环境的工具.提供命令行接口来安装.切换.删除.列出候选版本. SDKMAN!是在大多数基于Unix的系统上管理多个软件开发套件的并行版本的工具 ...

  7. python常用模块之sys模块

    python常用模块之sys模块 1.sys.argv[]:命令行参数List,第一个元素是程序本身 # 写一个简单的python程序,代码如下: #!/usr/bin/python #coding= ...

  8. iOS - 正则表达式判断邮箱、身份证,车牌,URL等..是否正确:

    //邮箱 + (BOOL) validateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Z ...

  9. 汇编语言---键盘KeyCode值列表

    键盘KeyCode值列表 收藏 keycode   0 =keycode   1 =keycode   2 =keycode   3 =keycode   4 =keycode   5 =keycod ...

  10. Nodejs下express+ejs模板的搭建

    nodejs的环境配置,这里就不做说明了.在nodejs安装后的步骤在这里说明一下 首先 全局安装express  npm install -g express-generator 安装ok后,接着 ...