2010年4月24日 星期六

Synology DS107+ 安裝 WordPress 全記錄

家裡的 Synology DS107+ 使用一年以來,一直扮演 NAS 的角色!


為了增加它的附加價值,所以開始著手 3rd Party 套件的安裝使用,


加上之前在找免費圖床的同時,看了如何幫BLOG找個好圖床?阿正老師經驗談(一) (阿正老師;2009) 文章之後,


決定把資訊掌握於自己手上,


因此目前先以 Blog 軟體為主,相關的版本訊息如下:


主機類型:Synology DS107+


韌體版本:DSM 2.3-1141


WordPress 版本:2.9.2


參考 markhuang7 (2008) 的經驗分享後,大致整理相關的步驟


一、安裝 SSH


先到官方網站下載



然後解壓縮後,到 Synology 的系統更新,並將 啟動SSH 的韌體上傳



...


二、安裝 IPKG


安裝完需重新開機,接下來就要找支援 SSH 的 Client 登入 Synology 主機了。


Windows 建議用 Putty ; 而 MAC 內建的 Terminal 就支援了,所以我就直接用啦。


開啟 Terminal 鍵入指令:ssh root@[Synology IP] ;再輸入 Admin 的密碼。



順利登入之後,按照 3epctw (2008) 的說明


1. 安裝 Bootstrap ( 啟動載入程式 )


wget www.buechse.de/SYNOLOGY/syno-x07-bootstrap_1.0-jb_arm.xsh

sh syno-x07-bootstrap_1.0-jb_arm.xsh

rm syno-x07-bootstrap_1.0-jb_arm.xsh


2. 更新套件庫


ipkg update

pkg upgrade


以上步驟都完成之後,該安裝 phpMyAdmin 跟 MySQL 囉!


...


三、啟動 Web Station 與 MySQL


首先透過管理介面把網路服務內的網頁應用程式相關服務打開



...


四、安裝 phpMyAdmin


再回到官方網站的下載中心下載 phpMyAdmin 套件。



下載完成之後,一樣解壓縮後,透過 Synology 管理介面的 套件管理 來進行安裝



安裝完下方就會顯示相關資訊與連結路徑


...


五、設定 MySQL 資料庫


根據官方的文件資料,預設 username 是 root ; password 是 (空白) - 記得要先設定密碼喔!



接著透過 權限 來建立新使用者



建立完成之後再用修改使用者的方式,把建立的DB授權給此使用者



...


六、安裝 WordPress


哇!總算到最後一個步驟了,先到 WordPress 官方網站下載最新版本,我是抓 2.9.2 。


解開壓縮檔之後,把 wordpress 整個目錄搬到 web 目錄下。


1. 修改 wp-config-sample.php


接著參考 markhuang7 的資料,打開 \web\wordpress\wp-config-sample.php 來設定資料庫連結。


define(‘DB_NAME’, ‘dbwordpress‘);    // The name of the database

define(‘DB_USER’, ‘usrwordpress‘);     // Your MySQL username

define(‘DB_PASSWORD’, ‘yourpasswordhere‘); // …and password

define(‘DB_HOST’, ‘localhost’);    // 99% chance you won’t need to change this value

define(‘DB_CHARSET’, ‘utf8′);


完成之後執行 http://[yoursite]/wordpress/wp-admin/install.php 開始安裝 WordPress


中途還會請您再提供一次 DB 的相關資訊 ( DB Name、User、 PWD ... )


最後則是請您提供 Blog 的 Title 與 eMail 。


總算安裝完成了,詳細資訊有興趣的朋友請自行參考官方安裝文件。


2. 更改權限


開始設定系統參數的時候,找到幾個 Theme 不錯看。


想不到支援線上下載安裝耶!


但是...會出現要我提供連線資訊的頁面 ><



怎麼樣都不行,找了幾種方法還是沒用。


後來在 Synology 官方討論區找到解法,因為權限的關係造成自動安裝的功能不 work,


重新授權就 OK 囉!


用 SSH 登入 Synology 之後,執行下面的指令:


chown -R nobody:nobody /volume1/web/wordpress


等它跑完要等一下下,再測試一次就 OK 囉!


...


※參考資料:


WordPress,http://wordpress.org/;安裝文件,http://codex.wordpress.org/Installing_WordPress


Synology,http://www.synology.com.tw/


阿正老師,2009/02,如何幫BLOG找個好圖床?阿正老師經驗談(一)

http://blog.soft.idv.tw/?p=462


markhuang7,2008/07,Synology DS207 架設 WordPress Blog

http://markhuang.wordpress.com/2008/07/18/synology-ds207-%E6%9E%B6%E8%A8%AD-wordpress-blog/


3epctw,2008/05,[分享]DS107+ 改機教學之四 :建構改機基本環境 (安裝Bootstrap及ipkg)

http://forum.synology.com/cht/viewtopic.php?f=7&t=37&sid=0129853dc5feb482ecd8cf3a7942bfc6


2010年4月13日 星期二

ORA-01460 unimplemented or unreasonable conversion requested

為了這個問題,搞了一天了,特此紀錄一下,也當作自己的 KM 吧!




WEB:Windows Server 2003 SP 2
DB:Oracle 10g
Data Provider:Oracle Client 10.02.00.03
Language:Asp .Net with C#
直接使用SqlDataSource的UpdateCommand功能透過StoreProcedure更新資料

網路上找到的資料大部分都是因為CLOB欄位型態而引起,可參考這篇:
LazyAssCoder, Dec 05, 2007
VB.NET: Error: System.Data.OracleClient.OracleException: ORA-01460: unimplemented or unreasonable conversion requested

但是我們又沒有用過這個型態,所以繼續查,Oracle Support中則是有其他資訊
描述中提到
This is a server side OCI issue caused when using a rebind of the same cursor.
詳細資訊可搜尋 Oracle Support

可是因為環境又不能隨便上Patch
所以決定土法煉鋼,一步一步測試。
利用OnUpdating顯示Parameters確認資料都有之後,
先建立一個空的StoreProcedure,僅接參數但不作任何事。
結果...一樣。


後來用一個測試的Table,讓UpdateCommand去Update它,
然後在OnUpdating裡面用DbCommand重新寫一段程式去呼叫StoreProcedure,
隨便亂試之後,出現了另外一個錯誤訊息:
ORA-01461: can bind a LONG value only for insert into a LONG column.
把其中一個變數的長度顯示出來,發現有 3199 個字元
可是 Oracle 的 VarChar2 可以到 4000 呀!
突然想到之前 9i 轉 10g 有遇到類似欄位型態要轉換的問題
所以調整了一下,在OnUpdating將Parameters的DbType改為AnsiString就好了!
.aspx 部份


<asp:SqlDataSource ID="SqlDataSource1" runat="server" .....
UpdateCommand="[StoreProcedureName]" UpdateCommandType="storedProcedure"
OnUpdating="ConvertUpdateDBTypeValue">
<UpdateParameters>
<asp:Parameters.....
..........


.aspx.cs 部份


protected void ConvertUpdateDBTypeValue(Object source, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["[ParameterName]"].DbType = DbType.AnsiString;
}