0

Я пришел, чтобы искать вашу коллективную мудрость.Использование ActiveResource для управления другой базой данных приложения

Моя цель, обзор: Чтобы лучше управлять компьютерами для разных клиентов, я пытаюсь расширить Puppet's Dashboard. Это приложение Rails 2, и я пытаюсь расширить его с помощью приложения Rails 3, которое я пишу. Есть несколько проблем, которые делают Dashboard менее совершенным для моих нужд, но решения просты. Я собираюсь сосредоточиться на одном, потому что я чувствую, что ответ на этот вопрос поможет мне понять остальное. Я искал решения, которые вообще не изменяют код приборной панели, потому что я не сторонник и не хочу создавать беспорядок в будущем.

Я много думал о том, как сделать это лучше всего. Я думал о подключении непосредственно в базу данных, но у меня были холодные ноги после небольшого поиска. Похоже, что настройка второго соединения с базой данных не так уж трудна, мне не нравится то, что меняет другую базу данных приложения во время ее работы. Пожалуйста, скажите что-нибудь, если я переведу совершенно разумный вариант, основанный на суеверии.

Было еще несколько идей, но тот, который я начал, наконец, и имел предельный успех, получал доступ к базе данных Dashboard через REST. Он встроен, почему бы не использовать его? Ну, я смог манипулировать несколькими таблицами, но не тем, что хотел. Таким образом, в этой ситуации нужно знать три таблицы.

  1. узлы (в основном компьютеры)
  2. node_groups (группы можно поставить компьютеры)
  3. node_group_memberships (объединение таблиц, связывающее 1 и 2 друг к другу)

Я могу добавить и удалить оба узла, и node_groups, но я хочу также иметь возможность создать соединение между ними. Для того, чтобы создать новый пользователь, у меня есть модель ActiveResource установить, что выглядит следующим образом:

class PuppetNode < ActiveResource::Base                                      
self.site = "http://127.0.0.1:4000/"               
self.element_name = "node"                 
attr_accessor :grouped   
end                        

Я тогда волен создавать новые узлы, или захватить данные из таблицы узлов с помощью консоли. Это может выглядеть примерно так:

PuppetNode.create(:column_name => "and so on") 

То же самое касается node_groups, и я могу даже создать Rails 3 модель, которая не парик за node_group_memberships, но я ничего не могу в этой таблице создать. Я могу видеть, если я смотрю на контроллер node_group_membership Rails 2 (хорошими людьми более в кукольных Labs), что существует метод создания

class NodeGroupMembershipsController < InheritedResources::Base 
    respond_to :json 
    before_filter :raise_if_enable_read_only_mode, :only => [:new, :edit, :create, :update, :destroy] 
    before_filter :standardize_post_data, :only => [:create] 

    def create 
    create! do |success, failure| 
     success.json { render :text => @node_group_membership.to_json, :content_type => 'application/json', :status => 201 } 
     failure.json { render :text => {}.to_json, :content_type => 'application/json', :status => 422 } 
    end 
    end 

    # we want: {node_group_membership => {node_id => <id>, node_group_id => <id>} 
    # allow and convert: {node_name => <name>, group_name => <name>} 
    def standardize_post_data 
    unless params[:node_group_membership] 
     params[:node_group_membership] = {} 
     node = Node.find_by_name(params[:node_name]) 
     group = NodeGroup.find_by_name(params[:group_name]) 
     params[:node_group_membership][:node_id] = (node && node.id) 
     params[:node_group_membership][:node_group_id] = (group && group.id) 
    end 
    end 
end 

Но по какой-то причине он задыхается каждый раз, когда я пытаюсь создать ассоциации с чем-то вроде этого

irb(main):005:0> PuppetNodeGroupMembership.create(:node_id => 20, :node_group_id => 5) 
=> #<PuppetNodeGroupMembership:0x007fb3150af878 @attributes={"node_id"=>20, "node_group_id"=>5}, @prefix_options={}, @persisted=false, @remote_errors=#<ActiveResource::ResourceInvalid: Failed. Response code = 422. Response message = .>, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007fb3150af4e0 @base=#<PuppetNodeGroupMembership:0x007fb3150af878 ...>, @messages={}>> 

Любые советы были бы оценены, я уже поставил твердые 8 ​​жалких часов в попытке понять это. Благодаря!

ответ

0

Для улучшения или, что еще хуже, одна вещь, которая работает, связана со второй базой данных с тем же Rails-приложением. Сейчас я оставляю это как «Ответ», но не «Ответ».

Это ресурс, который я нашел, что помог мне с собой: http://www.rubynaut.net/articles/2008/05/31/how-to-access-multiple-database-in-rails.html