RubyAMF 1.0

官方網站
顧名思義,ActionScript Message Format(AMF) 對 Ruby 的Gateway, 如先前提過的Weborb作用相同。藉由RubyAMF直接傳遞AS物件到伺服器端,能傳遞的物件也彈性的多,否則,傳統的方法都是用字串、XML等來作資料交換。
我寫下簡單的安裝方法:
工作環境 :: Flex + Ruby on Rails + RubyAMF
- 先安裝Flex , Rails(略)
- 下載 RubyAMF
- 解壓縮 rubyamf1.0.zip, 出現一個目錄叫做:
rubyamf
- 建立一個Rails專案:
rails rubyamf_project
- 把剛剛解壓縮的目錄複製到: rubyamf_project\vendor\plugins\
- 找到rubyamf\services\ruby_amf_controller.rb ,複製到 rubyamf_project\app\controllers\ 下面
- 啟動rails server:
ruby script/server
- 測試: http://localhost:3000/rubyamf/gateway/
出現:Your RubyAMF Flash Remoting gateway is alive and well. See wiki.rubyamf.org for more information.
就對了!
- 伺服器端設定完畢!先寫個簡單的測試Controller:
ruby script/generate controller HelloWorld
- 編輯剛剛產生的hello_world_controller.rb 寫個簡單的函式:
def say_hi
return "Hi from rails + rubyAMF";
end - 建立Flex 專案,用Flex Builder建一個Basic Project, 我把它叫做”AnotherAMF”
- 建立service-config.xml , 如下:
[xml]
*
[/xml]
- 把剛剛建好的service-config.xml放在專案根目錄下
- 打開AnotherAMF專案的”Properties”,找到:”Flex Compiler” 下面的 “Additional Compile Arguments” ,貼上這一段:
-locale en_US -services "service-config.xml"
- 建立一個測試的mxml:
[xml]
import mx.managers.CursorManager;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.RemoteObject;
import mx.controls.Alert;private function init():void{
var ro:RemoteObject = new RemoteObject();
ro.destination = "rubyamf";
ro.source = "HelloWorldController";
ro.say_hi.addEventListener(ResultEvent.RESULT , onLoad);
ro.addEventListener(FaultEvent.FAULT , onFault );
ro.say_hi();}
private function onLoad( event:ResultEvent ):void{
Alert.show(event.result.toString());
trace( event );
}private function onFault( event:FaultEvent ):void{
trace( event );
}]]>
[/xml] - 完成,執行Run…(記得要啟動rails server喔),應該可以看到從RubyAMF傳回的訊息”Hi from rails + rubyAMF”
官方網站教學(不用Rails)
結論:
剛剛測試的結果,有些時候會出現異常,尤其是在Flex Builder中使用Debug模式,會導致Rails找不到gateway的template…@.@,官方的圖文教學是沒有整合rails的方法,比較精簡。官方還有放 RubyAMF與Flash整合的示範影片,對於長久以來需要和伺服器溝通的Flasher有多一種選擇了。
