11

Goliathフレームワークを使用して非同期APIを作成しようとしています。サービスはmysqlに書き込み、RabbitMQにメッセージを追加し、応答を受信する必要があります。Railsで構築された別の管理アプリケーションも必要です。私はそれについていくつか質問があります:

RailsとGoliathの間でモデルを効果的に共有する方法はありますか?Activerecordまたは他のormをemで使用するのに問題はありますか?それに関するベストプラクティス、構成(接続プールのサイズ、ドライバー)、またはその他のオプションはありますか?AMQPからメッセージを受信するために何を使用する必要がありますか?別のeventmachineデーモンを構築する方が良いでしょうか、それともどういうわけかGoliathのものをそのようなものに使用できますか?よろしくお願いします。

4

1 に答える 1

5

GoliathでActiveRecordモデルを使用するための簡単なハックです。このアプローチでは、requireを使用せずにモデルを使用できますが、モデルレベルでの関係はありません。has_manyとbelongs_toの関係を取得するために(このアプローチでは)、モデルファイルをロードし、そのような単語を含む行を以下のクラス定義ループに含めます。

    require 'goliath'
    require 'active_record'
    require 'active_support'

    # The location of the Rails app to integrate
    RAILS_APP ||= ENV['HOME']+"/dev/qtrack"

    # Load the ActiveRecord database configuration, development settings
    configpath = File.join(RAILS_APP, "config", "database.yml")
    config = YAML::load_file(configpath)
    ActiveRecord::Base.establish_connection config["development"]

    # Set the names of all Rails models to a constant
    MODELS ||= []
    models_dir = File.join(RAILS_APP, "app", "models")
    model_names = Dir[models_dir+"/*.rb"]

    # Loop over each file name, define a class for each
    model_names.each do |fname|
      mname = File.basename(fname, '.rb').titleize.sub(/ /, '')
      eval %Q{
        class ::#{mname} < ActiveRecord::Base
        end
      }
      m = mname.constantize
      MODELS << m unless MODELS.include?(m)
    end

    class Hello < Goliath::API
      # default to JSON output, allow Yaml as secondary
      use Goliath::Rack::Render, ['json', 'yaml']

      def response(env)
        # Create a Hash with each model name and the object count
        models = MODELS.inject({}) {|hsh,model| hsh[model] = model.count; hsh }
        [200, {}, models.to_json ]
      end
    end

これはあなたのフィードバックに基づくハックです。

于 2012-06-25T14:28:24.763 に答える