sae資料庫
因為Python本身的動態特性和強大而簡介的語法,我們實現這一目標非常容易(在此對Java開發人員表示遺憾)。
假定我們確定用web.py框架,mysql資料庫,memcache緩存,這3個組件SAE都支持,但和本地環境均有差異。
B. 如何在新浪雲sae的web應用中配置資料庫mysql
進入雲應用的共享性mysql數據選項後,下方會出現如何連接mysql資料庫
點擊後會進入Mysql的API使用手冊,這里介紹了關於資料庫的一些預定義常量和一個使用其連接mysql的例子。然而,這並不是最方便的一個方法。
在新浪雲的Classes(我也不知道怎麼叫,簡稱classes)開發文檔中,有一個SaeMysql類。如圖,只需實例化SaeMysql類對象,不到20個字元即可完成資料庫連接。同時下方有同樣便利的函數來對資料庫進行各項常用操作。
下面我們使用Sublime Text來連接一次。
寫好代碼上傳到sae雲後,打開網頁。可以看到的確以多維數組的方式顯示了資料庫內的數據。
C. 如何向sae的mysql資料庫導入大於8192 KB的資料庫文件
1. MySQL字元集
MySQL的默認字元集是latin1,將本地MySQL庫導出成sql,再導入到SAE的MySQL時中文字元出現亂碼,解決方法是將本地mysql默認字元集也設成utf8
查看當前MySQL字元集
mysql> show variables like 'character_set_%';
更改MySQL默認字元集
$ vi /etc/mysql/my.cnf
在client和mysqld中加參數
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
init_connect='SET NAMES utf8'
重啟MySQL後台服務
$ service mysqld restart
2. 導入/導出數據
一般導入導出數據通過sql文件進行,sql文件包括一系列sql命令,包含建表,插入數據等等
3. 從MySQL導出數據
$ mysqlmp -h localhost -u root -p 庫名表名 > /tmp/tmp.sql
4. 向SAE資料庫中導入數據
SAE->我的應用->服務管理->MySQL->管理MySQL->導入,選擇/tmp/tmp.sql,文件字元集utf8,SQL兼容模式MYSQL40,導入
導入之後可以在管理MySQL界面中看到新導入的數據表
5. 錯誤處理
如果SAE導入時提示LOCK出錯,則在/tmp/tmp.sql中刪除所有LOCK, UNLOCK相關語句即可
D. 如何在新浪雲sae上安裝部署laravel5.1應用並測試資料庫連接
1、創建SAE應用
首先進入新浪雲SAE界面 http://sae.sina.com.cn/ :
點擊「創建新應用」,在創建應用頁面填寫表單,開發語言選擇php 5.6,選中「空應用」,然後點擊「創建應用」:
這樣在管理應用列表新增了一個「Laravel SAE」應用:
接下來我們點擊「Laravel SAE」進入管理應用界面,選擇左側「代碼管理」鏈接上傳應用代碼:
我們選擇使用Git管理代碼,點擊「Git」按鈕,頁面跳轉到Git安裝指南頁面:
通過該頁面我們得知代碼倉庫是 https://git.sinacloud.com/laravelsae/ ,接下來我們就可以按照部署說明上傳代碼到SAE。
2、上傳Laravel項目代碼到SAE
這里我們選擇Github上一個現成的項目 laravel5-on-sae ,該項目針對SAE對Laravel 5.1代碼做了特定修改,我們下載其 項目包 並解壓到本地。進入解壓後的 laravel5-on-sae 目錄,刪除隱藏的文件夾 .git ,新建一個 config.yaml ,編輯其內容如下:
handle:
- rewrite: if (path ~ "^/$") goto "public/index.php"
- rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "public/index.php/$1"
編輯 .gitignore 文件,移除第一行 /vendor (否則使用Git命令忽略該目錄,導致找不到/vendor/autoload.php而報錯)。
編輯 config/app.php ,移除 providers 數組中的如下這行:
App\Providers\ViewComponentServiceProvider::class,
編輯 app/Providers/EventServiceProvider.php 內容如下:
<?php
namespace App\Providers;
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
];
/**
* Register any other events for your application.
*
* @param \Illuminate\Contracts\Events\Dispatcher $events
* @return void
*/
public function boot(DispatcherContract $events)
{
parent::boot($events);
}
}
然後在 laravel5-on-sae 目錄下執行如下命令:
git init
git remote add sae https://git.sinacloud.com/laravelsae/
git add .
git commit -am 'laravelsae'
git push sae master:1
最後一條命令需要輸入的用戶名和密碼為安全郵箱和安全密碼,而不是微博賬號和密碼。如已啟用微盾動態密碼,則密碼應該是「安全密碼」+「微盾動態密碼」。
這樣我們就可以成功提交代碼到Laravel SAE應用。
在開始之前還需要在SAE中初始化Memcache,並且在Storage中新建一個域名為 laravel 的domain。
接下來我們在瀏覽器中訪問 http://laravelsae.sinaapp.com/laravel ,頁面顯示如下:
說明代碼部署成功!
3、測試資料庫連接
要在SAE上連接資料庫,首先我們需要點擊左側mysql初始化資料庫:
選擇「共享型MySQL」:
InnoDB目前只對企業開發,所以我們選擇MyISAM引擎,然後點擊初始化資料庫。初始化成功後頁面跳轉到MySQL管理頁面:
SAE中MySQL主機、埠、用戶名及密碼都用常量表示,我們在代碼中也要使用這些常量對資料庫進行設置,當然 laravel5-on-sae 這個項目已經為我們做好了設置,甚至配置了讀寫分離:
這里我去將 prefix 配置設置為 '' ,即不使用任何數據表前綴。
接下來我們對資料庫進行測試,還是在MySQL管理頁面我們點擊「管理MySQL」,頁面會跳轉到MySQL資料庫管理頁面,實際上是一個phpMyAdmin頁面:
在phpMyAdmin中我們創建一個數據表 posts 並插入兩條記錄:
接下來我們在項目代碼中 routes.php 新增一條路由:
Route::get('database/test','DbController@test');
然後創建控制器 DbController ,編輯其內容如下:
<?php
namespace App\Http\Controllers;
use DB;
class DbController extends Controller{
public function test(){
$posts = DB::table('posts')->get();
dd($posts);
}
}
然後提交該代碼到SAE項目:
git add .
git commit -m 'test'
git push sae master:1
在瀏覽器中訪問 http://laravelsae.sinaapp.com/database/test
E. 如何在SAE上架設RPC服務與Openresty的Lua服務通信
第1步:Openresty伺服器安裝和Lapis框架部署(此處只介紹Lapis的安裝)
a). 安裝luarocks。
sudo apt-get install luarocks
b). 通過luarocks安裝lapis框架。
sudo luarocks install lapis
第2步:用Lapis 創建Openresty工程.
lapis new
3.在Openresty中創建一個定時任務。
定時器的實現思想如下:
讓Openresty去載入一個lua腳本,腳本通過啟動一個timer設定,調用一個函數,在被調用的函數內部,循環遞歸的進行time設定,調用這個被周函數本身,利用這種周期性的調用事件,我們定時遞歸的函數體中,執行一個函數過程CallRPC()去通過RPC協議訪問SAE雲上的數據。
RPC介面定義與實現,在下面接下來的Django部分會詳細說明,下面就是提到的函數。此函數的主要的目的是6秒鍾的時間間隔,通過RPC協議,拉取SAE上Mysql資料庫里的數據,至於傳輸什麼數據是和你的業務直接相關的,我們此處就使用一個簡單的數據結構來說明問題。
local handler
function handler(premature, params)
--CallRPC就是Lua通過JSON.RPC訪問SAE的RPC伺服器。
CallRPC()
--遞歸的timer,重復調用handler函數。
local ok, err = ngx.timer.at(6, handler, "params-data")
ngx.log(ngx.DEBUG, "ok:", ok, " err:", err)
end
--第一次設定timer,調用hander函數。
local ok, err = ngx.timer.at(6, handler,"params-data")
ngx.log(ngx.DEBUG, "ok:", ok," err:", err)
--判斷第一次調用是否成功,如查不成功,把問題原因列印出來。
if not ok then
ngx.log(ngx.ERR, "err:", err)
end
創建SAE上的RPC服務:
完成創建工作需要五步:
1. 創建一個Django工程 。
2. 安裝RPC4Django。
3. .創建立資料庫表。
4. 實現RPC服務介面。
5. 啟動RPC服務。
我們先暫停Openresty的部分,先介紹如何在SAE構建RPC伺服器。
之前已經提過,構SAE上的RPC服務使用的是SAE的PYTHON服務,使用的也是SAE天然支持的Django框架。下面介紹的是創建一個Django工程,SAE天然支持 Django, Tornado, Flask框加。如果需要更多信息,請參考如下文章。
http://www.epubit.com.cn/article/143
伺服器端
第一步:創建一個Django工程 。
a). 創建工程。
django-admin.pystartproject testrpc
b). 在工程內創建APP。
pythonmanage.py startapp myrpc
兩格指令執行後,系統上建立如下的目錄結構。
這表明Djago已經成功能完成創建工程和APP。
第二步:安裝RPC4Django。
RPC服務主要靠的就是用RPC4Django來實現,rpc4django是一個開源項目,項目的地址如下:https://github.com/davidfischer/rpc4django
rpc4django也是一個Django的App,使用的話,只要在setting.py配置文件中引用即可。
修改testrpc文件夾中的setting.py文件,如下圖:
把rpc4django加入到工程安裝的APP的列表裡,這樣就可以像引用普APP一樣使用rpc4django了。
第三步.創建立資料庫表。
Django是MVC模式的Python框加,並且支持ORM,只要定一義一個Python的Model類,就可以同步生成資料庫表。
我們在myrpc文件夾下的models.py裡面加入表定義類,如下圖:
創建完Model模塊類後,需要同步一下DB,將Django根據類的定義生成對應的DB表格。
pythonmanage.py syncdb
如果之前安裝了SAE的本地運行環境的話,可能使用cloudsql.py 直接訪問遠端的SAE資料庫命令行。
第五步:啟動RPC服務。
經過以上四步,一個最簡單的SAE上的RPC服務就架設完了,讓我們啟到一個這個應用,然後RPC服務才可用。
Python manager.py runserver 127.0.0.1:8080
回到之前的Lua介紹,還剩下的步驟:
1.Lua調用 SAE上的RPC服務介面。
2.將返回的數據寫入Openresty的ShareDiction中。
3.使用Lapis模板系統,將返回結果顯示到網頁上。
F. 新浪的sae的mysql資料庫賬號多少
sae的資料庫在管理頁面,已經定義好了一些變數,拿到自己的資料庫配置的地方就可以了
一般是這也的
用戶名:SAE_MYSQL_USER
密碼:SAE_MYSQL_PASS
主庫域名:SAE_MYSQL_HOST_M
從庫域名:SAE_MYSQL_HOST_S
埠:SAE_MYSQL_PORT
資料庫名:SAE_MYSQL_DB
參考連接:http://sae.sina.com.cn/doc/php/mysql.html
G. 微信開發測試者,連接新浪saeMySQL資料庫問題
$link=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
附:
<?php
// 連主庫
$link=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
// 連從庫
// $link=mysql_connect(SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
if($link)
{
mysql_select_db(SAE_MYSQL_DB,$link);
//your code goes here
}
?>
H. 新浪SAE資料庫連接,PHP代碼,mysql_connect 函數的伺服器參數問題
默認埠可以不用寫。不是默認的就必須要寫上。
I. 新浪SAE如何連接mysql資料庫
我有現成的代碼。
$db['default']['hostname']=SAE_MYSQL_HOST_M;//主庫
$db['default']['hostname_s']=SAE_MYSQL_HOST_S;//從庫
$db['default']['username']=SAE_MYSQL_USER;
$db['default']['password']=SAE_MYSQL_PASS;
$db['default']['database']=SAE_MYSQL_DB;
$db['default']['port']=SAE_MYSQL_PORT;
用這些參數替代
J. 怎麼設置sae上的mysql資料庫的外碼
SAE的資料庫不能用於外部連接,你要內部連接就得用全局常量
資料庫名的常量是 SAE_MYSQL_DB
你裝應用以及代碼連接資料庫時都得用SAE_MYSQL_DB作為資料庫名,伺服器環境會根據你的賬號解析為你實際的資料庫名app_swzlzx