如果您想创建一个非平凡的网站和/或网络服务该怎么办?
如何部署生产服务器 Apache,其中使用 python 作为前端、使用 C++ 作为后端并使用 MySQL 作为持久性?
你应该使用什么胶水?
如何配置所有这些小东西?
常用术语:
LAMP 堆栈 = ubuntu大号inux +A帕赫 +米ySQL +磷ython 部署
LAMP-C++ = 使用 C++ 的 LAMP 堆栈部署
常见免责声明:
本指南远非完整或理想,但我想给社区一些回报。我希望它要么能帮助人们,要么至少能创造一个讨论此类部署的导火索。我想澄清的是,python/c++ 组合选择超出了本讨论的范围。据我所知,它是业界感兴趣的部署之一,或者至少能提供大量经验。
公共堆栈:
- Ubuntu 14.04.1 x64(
lsb_release -a
) - Apache 2.4.7,构建于 2014 年 7 月 22 日(
apache2 -v
) - mod_wsgi 2.7 (
cd /usr/lib/apache2/modules/; find . -name "*wsgi*"
) - python 2.7.6(
python -V
) - Boost.Python 又名 libboost_python-py27.so.1.54.0 (
cd /usr/lib; find . -name "*boost*";
) - GCC 4.8.2(
gcc -v
) - GNU Make 3.81(
make -v
) - Oracle Connector/C++ 7.1.1.3 又名 libmysqlcppconnd (
cd /usr/lib; find . -name "*mysqlcppconn*"
) - mysql 14.14(
mysql -V
)
看起来有点可怕,所以我将一步一步描述。
常见先决条件:
- 安装了 Ubuntu 14.04 x64(mb 适用于其他,但是我只测试了 14.04)
- 你知道 Linux 的基础知识
- 您已安装 GCC 和 GNU make (
sudo apt-get install gcc gcc-c++; sudo apt-get install build-essential;
) - mysite.com 应该替换为您为网站选择的名称
- MY_PC 应该替换为您的 PC 的名称,如果没有,请忽略。
答案1
选项:
选项 1 ->LAMP-C++ 与 web.py
这是一个相当简单的部署选项,非常适合编写几乎没有或没有 GUI 的 Web 服务的情况。
- web.py 0.37 (
pip list | grep web.py
) - stackoverflow 上的 web.py 信息 ->关联
- web.py 0.37 (
选项 2 ->LAMP-C++ 与 Django 和 Mezzanine
如果您想创建一个网站,这可能是一个选择,可能仍包含服务部分。框架 web.py 仍可用于辅助任务,但大部分前端工作将由 Django 和基于它的 CMS Mezzanine 管理。Mezzanine 以基于 Django 构建的优秀 CMS 框架而闻名,可用于快速构建内容驱动的网站。
- Django 1.6.1(
pip list | grep Django
) - 夹层 3.1.10(
pip list | grep Mezzanine
)
- Django 1.6.1(
答案2
LAMP-C++ 与 web.py
git repo 中的所有文件 ->关联
1)网络:
如果您想在家庭子网 (192.168.xxx.xxx IP-s) 上查看您的服务/站点,那么您应该确保 IP 地址稳定。我有一台路由器,它有一个内置的 DHCP 服务器,可以根据先连接的设备为设备提供家庭子网 IP-s。有两种方法可以解决这个问题:您可以设置设备以在家庭子网中具有首选 IP,或者您可以在路由器上配置 DHCP 例外(例如通过 Web 界面,192.168.1.1)。
配置完成后(或者根据您的路由偏好,您不需要配置),您可以使用以下方式识别计算机的 IP 地址
ifconfig
更新 /etc/hosts 以使您的开发机器上有正确的 DNS 解析:
#loopback 127.0.0.1 localhost #default 127.0.1.1 MY_PC #if your PC has a name #home subnet #192.168.1.2 mysite.com #ethernet IP 192.168.1.10 mysite.com #wifi IP
2)阿帕奇
安装:
sudo apt-get update sudo apt-get upgrade sudo apt-get install apache2
填写配置(Apache 2.4 与 Apache 2.2 的配置布局不同):
cd /etc/apache2 && ll
apache2.conf,附加(稍后将需要 wsgi):
# to manage python import statements in python WSGI wrapper WSGIPythonPath /path/to/work/www/mysite:/path/to/work/myproject/myproject_back # server name ServerName mysite.com
端口.conf:
# sets Apache listen on port 80 Listen *:80
站点可用/000-默认.conf
备份后我删除了它。没有它我的网站在根 URL mysite.com/ 处可见。
sites-available/mysite.com.conf (恰好包含“.com”部分!!!):
<VirtualHost 0.0.0.0:80> WSGIScriptAlias / /path/to/wsgi/entry/point/script/ <Directory /path/to/work/> Require all granted Options Indexes FollowSymLinks </Directory> ServerName mysite.com ServerAlias www.mysite.com DocumentRoot /path/to/work/www/mysite/ <Directory /path/to/work/www/mysite/> Require all granted Options Indexes FollowSymLinks </Directory> # to serve static content Alias /static /path/to/work/www/mysite/static/ #for wsgi script, if you intend ro use .py extension AddType text/html .py </VirtualHost>
检查您网站目录的权限。
添加您的网站:
sudo a2ensite mysite.com
重新启动 apache2 服务:
sudo service apache2 restart
检查 apache2 是否正在运行:
ps ax | grep apache2
检查 apache 是否在端口 80 上侦听任何人的连接:
sudo netstat -anp | grep apache
输出如下:
tcp6 0 0 :::80 :::* LISTEN 1996/apache2
3) mod_wsgi
sudo apt-get install libapache2-mod-wsgi
此后,您应该在目录 /etc/apache2/mods-enabled 中拥有 wsgi.conf 和 wsgi.load。
4)安装python
sudo apt-get install python
sudo apt-get install python-pip
5)安装 web.py(webpy.org 网站已被替换为http://webpy.github.io/)
sudo pip install web.py
6)安装 boost (autoremove 帮助我解决了损坏的软件包问题,以防万一):
sudo apt-get autoremove
sudo apt-get install libboost-all-dev
7)安装mysql:
创建一个数据库测试,表 hello,其中包含 INT id 和 VARCHAR(100) msg,并在其中插入“Hello world!”。如果您是 mysql 新手,上面的链接在底部有一些关于如何实现此目的的资源。
顺便说一句,Oracle 为 mysql 制作了一个免费的 GUI,它被称为 MySQL Workbench,这里。您需要 Oracle 注册(免费)才能下载它。
8)从以下位置安装 Oracle Connector/C++这里,安装说明这里。他们目前没有 .deb 包,所以我从源代码构建了它,只需 3 个 shell 命令,没有任何麻烦。您需要 Oracle 注册(免费)才能下载它。
9) 为简单的‘Hello World’编写大量 python 和 C++ 代码,该代码通过 python 和 C++ 进入 MySQL。
我有以下目录结构
~/work
:work | +-www | | | +-mysite@ [symlink to ../myproject/mysite dir, for apache and neatness] | +-mysite | | | +-myproject_front.py [that's WSGI entry point] | +-gateway_front.py [in here I import wrapped C++] | +-__init__.py [to treat dir as python module] | +-mysite_back [c++ backend is in separate folder] | +-gateway_back.cpp [Boost.Python wrapping code] +-hello_mysql.cpp [adapter to DB] +-gateway_back.o [object file after compilation] +-hello_mysql.o [object file after compilation] +-gateway_back.so [this will be a module for python] +-Makefile [cause Boost.Python works w/ python by an .so object]
除了 (2) 中的 apache2 配置和 ~/.bashrc 和 ~/.bash_aliases 配置之外,这就是您需要接触的所有文件。
更新 LD 和 PYTHON 的 .bashrc PATH 环境变量:
# PATH env vars export PATH=$PATH:/usr/lib/x86_64-linux-gnu export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib:/usr/local/lib export PYTHONPATH = $PYTHONPATH:\ /path/to/work/:\ /path/to/work/myproject/:\ /path/to/work/myproject/mysite/:\ /path/to/work/myproject/myproject_back/:\ /path/to/work/www:\ /path/to/work/www/mysite/
在 ~/.bash_aliases 中创建一个别名,以便从 shell 中获取“Hello World”[可选]
alias wget_oq='wget --timeout=3 -O - -q' hello() { if [ "$1" == "get" ] ; then wget_oq "$2" | cat fi }
别忘了
source ~/.bashrc ~/.bash_aliases
!复制粘贴更多代码后,你应该能够使用命令获取 MySQL 存储的“Hello World”
hello get mysite.com
编写python代码:
在里面.py:
myproject_front.py:[在此处指向 apache2 配置的 WSGIScriptAlias]
import web #web.py framework import gateway_front #python adapter to c++ urls = ( '/.*', 'hello', #url pattern for web.py to call hello.GET beneath ) class hello: def GET(self): #some browsers don't like plain text, so I use html web.header( 'Content-type', 'text/html' ) g = gateway_front.Gate() # get gateway to c++ s = g.hello() # get 'Hello World' message return str(s) # return it as a HTTP response #sets web.py's func as WSGI entry point application = web.application(urls, globals()).wsgifunc() # to test from console def main(): g = backend.Gate() s = g.getDefaultQuote() print s if __name__ == '__main__': main()
网关前端.py:
import sys import gateway_back # .so object, written in C++ with Boost.Python #simple singletone class Gate(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Gate, cls).__new__( cls, *args, **kwargs) return cls._instance def hello(self): return gateway_back.hello() #take hello from c++ backend # to test from console def main(): g = Gate() s = g.hello() print s if __name__ == '__main__': main()
编写 C++ 代码:
网关后台.cpp:
#include <boost/python.hpp> extern char const* hello(); BOOST_PYTHON_MODULE(gateway_back) { using namespace boost::python; def("hello", hello); }
你好mysql.cpp:
这是从 Oracle 官方 Connector/C++ 文档中摘录的,关联,并稍作修改。
#include <stdlib.h> #include <iostream> #include <string> #include "mysql_connection.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> using namespace std; char const* hello() try { sql::Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::ResultSet *res; /* Create a connection */ driver = get_driver_instance(); // MySQL IP address and your username con = driver->connect("tcp://127.0.0.1:3306", "username", "username"); /* Connect to the MySQL test database */ con->setSchema("test"); //your db name stmt = con->createStatement(); res = stmt->executeQuery("SELECT * from hello;"); string result; while (res->next()) { /* Access column data by alias or column name */ result = res->getString("msg"); // field in db with actual 'Hello World' return result.c_str(); } delete res; delete stmt; delete con; } catch (sql::SQLException &e) { cerr << "# ERR: SQLException in " << __FILE__; cerr << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; cerr << "# ERR: " << e.what(); cerr << " (MySQL error code: " << e.getErrorCode(); cerr << ", SQLState: " << e.getSQLState() << " )" << endl; }
生成文件:
# location of the Python header files PYTHON_VERSION = 2.7 PYTHON_INCLUDE = /usr/include/python$(PYTHON_VERSION) # location of the Boost Python include files and library BOOST_INC = /usr/include BOOST_LIB = /usr/lib/x86_64-linux-gnu #compile mesh classes TARGET = gateway_back COTARGET = hello_mysql .PHONY: all clean all: $(TARGET).so clean: rm -rf *.o; rm $(TARGET).so # (!!!) broke the string for good formatting @ askubuntu # important: linking against boost.python, python and connector/c++ # order might be crucial: had to place -lmysqlcppconn at the end $(TARGET).so: $(TARGET).o $(COTARGET).o g++ -shared -Wl,--export-dynamic $(TARGET).o $(COTARGET).o -L$(BOOST_LIB) -lboost_python-py27 -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o $(TARGET).so -lmysqlcppconn # (!!!) broke the string for good formatting @ askubuntu # important: boost and python includes $(TARGET).o: $(TARGET).cpp $(COTARGET).cpp g++ -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -fPIC -c $(TARGET).cpp $(COTARGET).cpp
make
使用shell 命令将 C++ 代码构建到 gateway_back.so 中将浏览器指向您在步骤(1)和(2)中选择的 URL 或 IP 地址,或
hello get <your url or IP Address>
从控制台输入以获取“Hello”。
10)它会起作用。最终。)如果它不起作用,或者有人知道更好的方法,让我们讨论并扩展指南,特别是在请改正标记的地方。
答案3
LAMP-C++ 与 Django 和 Mezzanine
git repo 中的所有文件 ->关联
1)网络:
如果您想在家庭子网 (192.168.xxx.xxx IP-s) 上查看您的服务/站点,那么您应该确保 IP 地址稳定。我有一台路由器,它有一个内置的 DHCP 服务器,可以根据先连接的设备为设备提供家庭子网 IP-s。有两种方法可以解决这个问题:您可以设置设备以在家庭子网中具有首选 IP,或者您可以在路由器上配置 DHCP 例外(例如通过 Web 界面,192.168.1.1)。
配置完成后(或者根据您的路由偏好,您不需要配置),您可以使用以下方式识别计算机的 IP 地址
ifconfig
更新 /etc/hosts 以使您的开发机器上有正确的 DNS 解析:
#loopback 127.0.0.1 localhost #default 127.0.1.1 MY_PC #if your PC has a name #home subnet #192.168.1.2 mysite.com #ethernet IP 192.168.1.10 mysite.com #wifi IP
2)阿帕奇
安装:
sudo apt-get update sudo apt-get upgrade sudo apt-get install apache2
填写配置(Apache 2.4 与 Apache 2.2 的配置布局不同):
cd /etc/apache2 && ll
apache2.conf,附加(稍后将需要 wsgi):
# server name ServerName mysite.com
端口.conf:
# sets Apache listen on port 80 Listen *:80
站点可用/000-默认.conf
备份后我删除了它。没有它我的网站在根 URL mysite.com/ 处可见。
sites-available/mysite.com.conf (恰好包含“.com”部分!!!):
<VirtualHost 0.0.0.0:80> # SERVER-------------------------------------- ServerName mysite.com ServerAlias www.mysite.com DocumentRoot /path/to/work/www/mysite/ # STATIC------------------------------------- Alias /robots.txt /path/to/work/www/mysite/static/robots.txt Alias /favicon.ico /path/to/work/www/mysite/static/favicon.ico Alias /static/ /path/to/work/www/mysite/static/ # WSGI---------------------------------------- WSGIDaemonProcess mysite.com processes=2 threads=15 display-name=%{GROUP} python-path=/path/to/work/:/home/sdd/work/myproject/:/path/to/work/myproject/mysite/:/path/to/work/myproject/backend/:/path/to/work/www/:/path/to/work/www/mysite/ WSGIProcessGroup mysite.com WSGIScriptAlias / /path/to/work/www/mysite/wsgi.py/ # DIRECTORIES--------------------------------- <Directory /path/to/work/www/mysite/static/> Require all granted Options Indexes FollowSymLinks </Directory> <Directory /path/to/work/> Require all granted Options Indexes FollowSymLinks </Directory> <Directory /path/to/work/www/mysite/> <Files wsgi.py> Require all granted </Files> Options Indexes FollowSymLinks </Directory> # MISC---------------------------------------- # add .py file type for mod_wsgi to start wsgi.py correctly AddType text/html .py </VirtualHost>
检查您网站目录的权限。
添加您的网站:
sudo a2ensite mysite.com
重新启动 apache2 服务:
sudo service apache2 restart
检查 apache2 是否正在运行:
ps ax | grep apache2
检查 apache 是否在端口 80 上侦听任何人的连接:
sudo netstat -anp | grep apache
输出如下:
tcp6 0 0 :::80 :::* LISTEN 1996/apache2
3) mod_wsgi
sudo apt-get install libapache2-mod-wsgi
此后,您应该在目录 /etc/apache2/mods-enabled 中拥有 wsgi.conf 和 wsgi.load。
4)安装python
sudo apt-get install python
sudo apt-get install python-pip
5)安装django
sudo pip install Django
6)安装 boost (autoremove 帮助我解决了损坏的软件包问题,以防万一):
sudo apt-get autoremove
sudo apt-get install libboost-all-dev
7)安装mysql:
创建一个数据库测试,表 hello,其中包含 INT id 和 VARCHAR(100) msg,并在其中插入“Hello world!”。如果您是 mysql 新手,上面的链接在底部有一些关于如何实现此目的的资源。
顺便说一句,Oracle 为 mysql 制作了一个免费的 GUI,它被称为 MySQL Workbench,这里。您需要 Oracle 注册(免费)才能下载它。
然后,有用于 python 的 mysql 部分:
sudo apt-get install libmysqlclient-dev
sudo pip install MySQL-python
如果出现问题,请按照以下步骤操作 ->关联
8)从以下位置安装 Oracle Connector/C++这里,安装说明这里。他们目前没有 .deb 包,所以我从源代码构建了它,只需 3 个 shell 命令,没有任何麻烦。您需要 Oracle 注册(免费)才能下载它。
9)安装并配置Mezzanine
sudo pip install Mezzanine
cd work
mezzanine-project mysite
Mezzanine 安装指南建议您使用createdb
manage.pyrunserver
包装器。对于数据库,我使用了不同的方法,对于服务器 - Apache 而不是 django dev 服务器。
在由 Mezzanine 创建的 mysite 目录中,在 local_config.py 中:
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": "your_db_name",
# Not used with sqlite3.
"USER": "your_user",
# Not used with sqlite3.
"PASSWORD": "your_mysql_password",
# Set to empty string for localhost. Not used with sqlite3.
"HOST": "localhost",
# Set to empty string for default. Not used with sqlite3.
"PORT": "3306",
}
}
比执行
python manage.py syncdb
这将在你的数据库旁边创建django表,创建于(7)
在 mezzanine-created mysite 目录中的 settings.py 中更改 ALLOWED_HOSTS:
ALLOWED_HOSTS = [
'.mysite.com',
'.mysite.com/test'
]
将以下内容添加到 urls.py:
url("^test/$", 'hello.test', name='test'),
紧接着urlpatterns += patterns('',
行。这需要在 mysite/test/url 上以及 mysite.com url 上的夹层主页上进行纯文本服务输出。
10)收集静态文件
如果没有,请在 mysite 目录中创建 /static/ 子目录
有一个路径在 settings.py 配置(带有一些中间插件的 django 配置)部分,我们需要检查 STATIC_URL 设置并添加 django-admin 静态文件的路径
STATIC_URL = "/static/"
#additional static files' dirs
STATICFILES_DIRS = (
"/usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin",
)
现在我们可以将静态文件收集到一个地方 - 这就是 django 作者建议存储所有 css、js、txt 等内容
python manage.py collectstatic
11)现在我们需要填写python和C++代码
我有以下目录结构
~/work
:work | +-www | | | +-mysite@ [symlink to ../myproject/mysite dir, for apache and neatness] | +-mysite | | | +-deploy/ [mezzanine deploy stuff] | +-static/ [static files we collected] | +-fabfile.py [script that creates mezzanine-project] | +-hello.py [script for testing service output] | +-local_settings.py [mezzanine site-specific settings] | +-settings.py [django settings with mezzanine addon] | +-manage.py [management script wrapping calls to django admin functions] | +-urls.py [url patterns] | +-wsgi.py [wsgi entry point] | +-gateway.py [in here I import wrapped C++] | +-__init__.py [to treat dir as python module] | +-backend [c++ backend is in separate folder] | +-gateway.cpp [Boost.Python wrapping code] +-hello_mysql.cpp [adapter to DB] +-gateway_back.o [object file after compilation] +-hello_mysql.o [object file after compilation] +-gateway_back.so [this will be a module for python] +-Makefile [cause Boost.Python works w/ python by an .so object] +-__init__.py [to import backend into python app]
除了 (2) 中的 apache2 配置和 ~/.bashrc 和 ~/.bash_aliases 配置之外,这就是您需要接触的所有文件。
更新 LD 和 PYTHON 的 .bashrc PATH 环境变量:
# PATH env vars export PATH=$PATH:/usr/lib/x86_64-linux-gnu export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib:/usr/local/lib export PYTHONPATH = $PYTHONPATH:\ /path/to/work/:\ /path/to/work/myproject/:\ /path/to/work/myproject/mysite/:\ /path/to/work/myproject/backend/:\ /path/to/work/www:\ /path/to/work/www/mysite/
在 ~/.bash_aliases 中创建一个别名,以便从 shell 中获取“Hello World”[可选]
alias wget_oq='wget --timeout=3 -O - -q' hello() { if [ "$1" == "get" ] ; then wget_oq "$2" | cat fi }
别忘了
source ~/.bashrc ~/.bash_aliases
!复制粘贴更多代码后,你应该能够使用命令获取 MySQL 存储的“Hello World”
hello get mysite.com
编写python代码:
在里面.py:空,如果需要,可以在此处放置模块的任何初始化
wsgi.py:
from __future__ import unicode_literals import os import sys PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) sys.path.append( '/path/to/work/myproject/mysite' ) os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
hello.py:[在此处指向 apache2 配置的 WSGIScriptAlias]
from django.http import HttpResponse import gateway def test(request): text = str( gateway.Gate().hello() ) return HttpResponse( text, content_type="text/plain" ) def main(): g = gateway.Gate() s = g.getDefaultQuote() print s if __name__ == '__main__': main()
网关.py:
import sys import backend.gateway class Gate(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Gate, cls).__new__( cls, *args, **kwargs) return cls._instance def hello(self): return backend.gateway.hello() def main(): g = Gate() s = g.hello() print s if __name__ == '__main__': main()
编写 C++ 代码:
网关后台.cpp:
#include <boost/python.hpp> extern char const* hello(); BOOST_PYTHON_MODULE(gateway) { using namespace boost::python; def("hello", hello); }
你好mysql.cpp:
这是从 Oracle 官方 Connector/C++ 文档中摘录的,关联,并稍作修改。
#include <stdlib.h> #include <iostream> #include <string> #include "mysql_connection.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> using namespace std; char const* hello() try { sql::Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::ResultSet *res; /* Create a connection */ driver = get_driver_instance(); // MySQL IP address and your username con = driver->connect("tcp://127.0.0.1:3306", "username", "username"); /* Connect to the MySQL test database */ con->setSchema("test"); //your db name stmt = con->createStatement(); res = stmt->executeQuery("SELECT * from hello;"); string result; while (res->next()) { /* Access column data by alias or column name */ result = res->getString("msg"); // field in db with actual 'Hello World' return result.c_str(); } delete res; delete stmt; delete con; } catch (sql::SQLException &e) { cerr << "# ERR: SQLException in " << __FILE__; cerr << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; cerr << "# ERR: " << e.what(); cerr << " (MySQL error code: " << e.getErrorCode(); cerr << ", SQLState: " << e.getSQLState() << " )" << endl; }
生成文件:
# location of the Python header files PYTHON_VERSION = 2.7 PYTHON_INCLUDE = /usr/include/python$(PYTHON_VERSION) # location of the Boost Python include files and library BOOST_INC = /usr/include BOOST_LIB = /usr/lib/x86_64-linux-gnu #compile mesh classes TARGET = gateway COTARGET = hello_mysql .PHONY: all clean all: $(TARGET).so clean: rm -rf *.o; rm $(TARGET).so # (!!!) broke the string for good formatting @ askubuntu # important: linking against boost.python, python and connector/c++ # order might be crucial: had to place -lmysqlcppconn at the end $(TARGET).so: $(TARGET).o $(COTARGET).o g++ -shared -Wl,--export-dynamic $(TARGET).o $(COTARGET).o -L$(BOOST_LIB) -lboost_python-py27 -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o $(TARGET).so -lmysqlcppconn # (!!!) broke the string for good formatting @ askubuntu # important: boost and python includes $(TARGET).o: $(TARGET).cpp $(COTARGET).cpp g++ -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -fPIC -c $(TARGET).cpp $(COTARGET).cpp
make
使用shell 命令将 C++ 代码构建到 gateway_back.so 中将浏览器指向您在步骤(1)和(2)中选择的 URL 或 IP 地址,或
hello get <your url or IP Address>
从控制台输入以获取“Hello”。
12) 结果。现在,如果所有操作都正确并且我没有遗漏任何东西,你应该得到以下结果:
- www.mysite.com 上的夹层默认主页看起来很可爱
- www.mysite.com/test 上的纯文本“hello world”(如果您想在网站旁边创建带有 API 的 Web 服务,则此部分是必需的)
PS 下一步该做什么:
您可以
python manage.py collecttemplates
从 mysite 目录开始处理夹层模板您可以使用您的 mysql 登录名/密码登录到您的管理界面(mysite/admin)。
如果我们使用默认方式 - python manage.py createdb
,则登录名/密码将是 admin/default。但我尝试按照我的方式进行操作,以便 django 与我现有的 mysql 帐户及其登录名/密码同步。这些与您登录 mysql 客户端或在 mysql_hello.cpp 中使用的相同。
您可以通过 mysite/admin 网络界面或manage.py changepassword your_user_name
命令更改管理员密码。
使用 django-admin 实用程序和 manage.py 脚本管理 django 在官方 django 文档中有最好的描述 ->关联。