This page looks plain and unstyled because you're using a non-standard compliant browser. To see it in its best form, please visit upgrade to a browser that supports web standards. It's free and painless.

Fillano's Learning Notes 會員登入 會員註冊

其實如前篇,並沒有什麼進度,不過反正一步一步測試。

目前是先把Quercus on the Google App Engine的例子porting到CodeIgniter然後放到google app engine跑跑看。urlrewrite的部份透過UrlRewrite Filter來做。

datastore還是用google app engine官網的例子與Quercus on the Google App Engine的php程式整合出來的,只是把MVC分開,用CodeIgniter來跑。

有興趣可以玩玩看:http://fillanocode.appspot.com/

要改資料庫方法跟ActiveRecord方法,可能需要做一些抉擇。google提供的datastore其實是一個ORM的東西,跟直接操作關聯式資料庫的方法頗有差距,與其porting上去(但是背後要重組query),也許不如透過JDO去操作...,不然要實作到可以直接透過sql操作,要花不少功夫。

怕標題太聳動,所以先聲明一下,我只是想讓CodeIgniter根目錄下的index.php會動。(怎麼在Google App Engine跑php,請參考前篇用Google App Engine跑php ,至於為何挑CodeIgniter?因為他架構比較簡單,似乎比較容易改...)

Google App Engine有一個限制,就是無法寫入檔案系統,這對於許多framework及php有很大殺傷力。尤其是cache機制,需要可以動態產生、更新cache,這樣在Google App Engine跑php就有很多問題。例如想要跑CodeIgniter,就會出現一堆錯誤訊息,主要來自無法寫入檔案。

Quercus有一個很方便的地方,就是可以自己寫QuercusModule,QuercusModule的公有方法就會成為php函數。使用自訂的函數,配合Google App Engine的datastore服務,就有可能把datastore當作檔案系統來使用。

 (閱讀全文)

Google App Engine開始測試java的支援了。由於java透過他的scripting可以支援php,所以可以用這個方式間接在Google App Engine跑php。之前在請問一下有人在玩google app engine嗎? 討論串討論了一下,自己又找資料做了一些測試,果然可以,但是有少許語法似乎會有問題。

主要的參考資料可以看下面幾個連結:

詳細的配置使用方法可以參考上面的連結,但是web.xml不要用第二個連結裡面的,他改過QuercusServlet,使用GoogleQuercusServlet,但是以發行的quercus.jar裡面沒有這個東西,所以配置會有問題。只要把google的guestbook範例跟第二個連結中的php範例結合起來理論上應該就ok......不過我直接用那個php範例會出現錯誤......稍微除錯一下php,發現php裡面的

foreach ($greetings as $g) {
  ......
這一行出現錯誤,所以改了一下陣列的使用方式,就可以跑了:
for ($i=0; $i<count($greetings); $i++) {
  $g = $greetings[$i];
  ......

需要注意的是,目前google appengine datastore的使用與資料庫大大不同,他是一個object data store,目前java可以透過他提供的jdo/jpa方式來存取,存入的entity class必須用java來實作,用php做不出來。參考上面第二個連結可以看到短期可能出現的一些解法(透過H2模擬mysql),長期恐怕還是需要等google推出原生的支援。


2009-5-15 16:52 補充

上了resin的官網仔細看了一下,resin-4.0.0裡面可以找到resin.jar,這裡面就有GoogleQuercusServlet(如同blog上說的)。另外測試了一下,建議使用resin.jar而不是quercus.jar + resin-util.jar + script-10.jar + jetty-util-6.1.0.jar這個solution。這樣使用foreach也不會出現錯誤訊息。