2012-06-21 17 views
10

paylaşımı. Servis mysql'ye yazmalı, RabbitMQ'ye mesaj eklemeli ve cevapları geri almalıdır. Ayrıca Rails ile inşa edilmiş ayrı bir yönetici uygulaması olmalıdır.Raylar uygulaması ve Goliath API ve veritabanı/modeller Ben Goliath çerçevesine zaman uyumsuz api oluşturmaya çalışıyorum

etkili bir Raylar ve Goliath arasındaki modellerini paylaşmak için bir yol var mı: Ben bu konuda birkaç soru var? activerecord veya em ile başka herhangi bir ORM kullanmak için herhangi bir sorun var mı? En iyi uygulamalar, yapılandırma (bağlantı havuzu boyutu, sürücü) veya bununla ilgili başka seçenekler var mı? Ne sahip olduğum AMQP mesaj almak kullanılır? Daha iyi bir ayrı eventmachine cini inşa etmek istiyorsunuz veya i nasılsa şeyler için Goliath'ların birini kullanabilirsiniz? Şimdiden teşekkürler.

cevap

4

Goliath'da ActiveRecord modellerini kullanmanın hızlı bir şekilde kesilmesi. Bu yaklaşımla modeli ihtiyaç duymadan kullanabilirsiniz, ancak model seviyesinde ilişkileriniz yoktur. Has_many ve belongs_to ilişkilerini (bu yaklaşımda) almak için, model dosyasını yüklerim ve bu tür kelimeleri içeren satırları aşağıdaki sınıf tanımı döngüsüne dahil ederim.

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 

Bu

geri bildirimleri temel alarak kesmek.

+0

Btw: ActiveRecord mücevher 'activerecord' şeklindedir, gereksinim gösterildiği gibidir. – ringe

+1

Örneğinizde modeli raylarla paylaşmıyorsunuz. Ayrıca modellerde çok mantığımız varsa, basitçe bunları gerektirecek kadar güvenli değildir. Senkronize mantık ayırma gereklidir. Ayrıca bildiğiniz gibi sqlite sürücünün – Bombazook

+1

uyumsuzluğunu taşımadı Rails modellerinin kullanımını göstermek için örneği kullanmadan düzenledim. SQlite ile ilgili problem en iyi şekilde farklı bir veritabanı kullanılarak çözülür. – ringe

İlgili konular