RubyAMF 1.0

rubyamf logo
官方網站
顧名思義,ActionScript Message Format(AMF) 對 Ruby 的Gateway, 如先前提過的Weborb作用相同。藉由RubyAMF直接傳遞AS物件到伺服器端,能傳遞的物件也彈性的多,否則,傳統的方法都是用字串、XML等來作資料交換。

我寫下簡單的安裝方法:

工作環境 :: Flex + Ruby on Rails + RubyAMF

  1. 先安裝Flex , Rails(略)
  2. 下載 RubyAMF
  3. 解壓縮 rubyamf1.0.zip, 出現一個目錄叫做:
    rubyamf
  4. 建立一個Rails專案:
    rails rubyamf_project
  5. 把剛剛解壓縮的目錄複製到: rubyamf_project\vendor\plugins\
  6. 找到rubyamf\services\ruby_amf_controller.rb ,複製到 rubyamf_project\app\controllers\ 下面
  7. 啟動rails server:
    ruby script/server
  8. 測試: http://localhost:3000/rubyamf/gateway/
    出現:

    Your RubyAMF Flash Remoting gateway is alive and well. See wiki.rubyamf.org for more information.

    就對了!

  9. 伺服器端設定完畢!先寫個簡單的測試Controller:
    ruby script/generate controller HelloWorld
  10. 編輯剛剛產生的hello_world_controller.rb 寫個簡單的函式:
    def say_hi
         return "Hi from rails + rubyAMF";
      end
  11. 建立Flex 專案,用Flex Builder建一個Basic Project, 我把它叫做”AnotherAMF”
  12. 建立service-config.xml , 如下:
    [xml]







    *








    [/xml]

  13. 把剛剛建好的service-config.xml放在專案根目錄下
  14. 打開AnotherAMF專案的”Properties”,找到:”Flex Compiler” 下面的 “Additional Compile Arguments” ,貼上這一段:
    -locale en_US -services "service-config.xml"
  15. 建立一個測試的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]

  16. 完成,執行Run…(記得要啟動rails server喔),應該可以看到從RubyAMF傳回的訊息”Hi from rails + rubyAMF”

官方網站教學(不用Rails)
結論:
剛剛測試的結果,有些時候會出現異常,尤其是在Flex Builder中使用Debug模式,會導致Rails找不到gateway的template…@.@,官方的圖文教學是沒有整合rails的方法,比較精簡。官方還有放 RubyAMF與Flash整合的示範影片,對於長久以來需要和伺服器溝通的Flasher有多一種選擇了。

Leave a Reply