【解决】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. [C#]委托实例分析(附源码)

    一直都听说C#中的委托与事件非常重要,都没有什么切身的体会,而这次通过做一个WinForm二次开发的项目才真正感觉到了委托与事件的犀利之处. 1.C#中的事件和委托的作用? 事件代表一个组件能够被关注 ...

  2. C# 设计模式巩固笔记 - 建造者模式

    前言 写给自己-贵在坚持.建造者模式不复杂,但是想个形象的例子好难. 介绍-建造者模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实现 建造者模式主要是应对复杂 ...

  3. hdu 6040 Hints of sd0061(stl: nth_element(arr,arr+k,arr+n))

    Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  4. SpringCloud_00_资源帖

    一.官方资料 spring-cloud reference springcloud中文网 Spring Cloud 官方中文文档(dalston) 二.精选资料 1.翟永超-<Spring Cl ...

  5. zset类型以及其操作

    sorted set类型 sorted sets类型以及其操作zset是set的一格升级版本,它在set的基础上增加了一格顺序属性,这一属性在添加元素的同时可以指定,每次指定后,zset会自动重新按照 ...

  6. SQL 动态PIVOT查询

    DECLARE @sql_str VARCHAR(8000)DECLARE @sql_col VARCHAR(8000) SELECT @sql_col = ISNULL(@sql_col + ',' ...

  7. Linux下使用Opencv打开笔记本摄像头

    新建test文件夹,文件夹存在test.cpp和CMakeLists.txt test.cpp#include <iostream> #include <string> #in ...

  8. 移动端 css 禁止长按屏幕选中

    *{ -webkit-touch-callout:none; -webkit-user-select:none; -khtml-user-select:none; -moz-user-select:n ...

  9. 提问:错误提示--命名空间“System.Web”中不存在类型或命名空间名称“UI”(是缺少程序集引用吗?) 如何解决??

    转自:http://topic.csdn.net/u/20080723/21/7e1e06cb-d013-4675-ba9b-9b39d49d0a0e.html 1) 添加对System.Web.dl ...

  10. python爬虫入门(4)-补充知识:XPath 教程(转自w3school)

    http://www.w3school.com.cn/xpath/index.asp 参考手册:http://www.w3school.com.cn/xpath/xpath_functions.asp ...