Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Ресурсы Список джемов      Поиск   

Page_edit

На форуме

ruby [30]cgi [14]will_paginate [13]session [10]rails [9]ror [9]mongrel [7]NetBeans [7]rails 2.0 [7]rails 2.1 [7]

В блогах

rails [3] ruby [3] sqlite [1] gem [1] debug [1] ror [1] NetBeans [1] google [1] localization [1] ruby on rails [1]

Немного поколбасило вчера наш сервачек

Date2008-08-29 UserRuslan Voloshin Commentкоментарии 0

Как говорят если хочшеь сделать человеку хорошо сначала сделай ему плохо потом верни как было.

(так у нас на военной кафедре говорили)

Вчера я решил сделать маленкький апдейт который атянулся до начала 5 утра сегодняшнего дня. Раноше я не понимал почему системный администратор не любит перегружать машину которая уже поднята пол месяца и больше, оказывается есть много причин :)

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

Kernel panic - not syncing: IO-APIC + timer doesn't work

If you get this message when rebooting, add "noapic" to the kernel options when booting, and add it to Grub's kernel line (/boot/grub/grub.conf to make it permanent for this kernel).

Alternatively : "I got a ASUS M2N-MX just installed and also got the same error when begin installation. I change the ACPI support to 2.0 in BIOS (also put the correct frequency and delays in memmories), and since too many trestarts and power off and power on to test I didn't get the "Kernel Panic - not syncing: IO-APIC + timer doesn't work!" anymore! If this option is not present in the mother you buy, just update the BIOS (I have not to do it). I also disabled in BIOS Chipset-> SouthBridge-> MCP61 ACPI HPET TABLE : If you enable it you will get again the IO-APIC error..."

"running with noapic is for the replacement for the old PIC chip that used to come on motherboards that allowed you to setup nterrupts. sometimes motherboards come with small defects ( called bugs ) and loading the kernel without the this apic is the only way to load you're system. my PC at home would not run CentOS 5 smp kernel or Fedora 5,6,7,8 without setting noapic.the way to test it is to edit the grub menulist while booting and adding noapic at the end"

In case you're interested, APIC is "an Advanced Programmable Interrupt Controller (APIC), a more intricate Programmable Interrupt Controller (PIC) containing a magnitude more outputs and much more complex priority schemas. Advanced IRQ management."

Lots of ACPI errors

Looks like Linux doesn't like the way this host supports ACPI:

ACPI Error (psargs-0355): [HPTF] Namespace lookup failure, AE_NOT_FOUND
ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.HPET._STA] (Node ffff81003bfb17f0), AE_NOT_FOUND
ACPI: PCI Interrupt Link [LNK1] (IRQs 5 7 9 10 11 14 15) *0, disabled.

Плюс наличие следующих параметров в /etc/grun/grub.conf

  noapic acpi=off

если в кратце то все хотя были еще поломки с мускулом для другого сайта  и так далее короче вечерок удался на славу.

created_at 4:23

Подключение рейлс приложения к нескольким базам данных

Date2008-08-28 UserRuslan Voloshin Commentкоментарии 0

И так начнем с добавления еще одного конекшина в конфиг базы данных

database.yml

development:
  adapter: postgresql
  database: application_development

marketing_db_development:
  adapter: postgresql
  database: marketing_db_development
  username: postgres

 


Теперь  делаем модель для виртуального адаптера  от которой потом будут наследоваться все таблицы которые будут браться из другой базы

class MarketingDb < ActiveRecord::Base
  self.abstract_class = true
  establish_connection("marketing_db_#{RAILS_ENV}".to_sym)
end

А дальше для проверки запускаем консоль

[wr@bublik trunk]$ script/console
Loading development environment (Rails 2.1.0)
>> ManagementDb.connection.execute("select * from users")
=> #<Mysql::Result>


как видно запросы обрабатываются и отсылаются к другой базе, далее попытаюсь показать наглядней

данные из основной базы

>> User.first
=> #<User id: 267300, account_id: 208552, sasp_id: 232123370, address_id: 35917, title

Попытаемся сделать запрос к дополнительной базе

 ManagementDb.connection.select_all("select * from users")
=> [{"yahoo_handle"=>"wert", "updated_at"=>"2008-08-27 05:47:05", "raiting"=

Запрос выполнился но рельзультатов не видно для этого создадим новый клас который будет конектиться к дополнительной базе и искать пользователей в ней

>> class MailUser < ManagementDb
>> set_table_name "users"
>> end
=> nil
>> MailUser.first
=> #<MailUser id: 1, login: "admin", email: "rebisall@gmail.com", first_name: "Ruslan",

и вот результат положительный мы нашли пользователя в другой бузе данных

Ждите в следующем посте описание миграций при друх коннектах

Построение запросов с помощью conditions_fu

Date2008-08-20 UserRoman V. Babenko Commentкоментарии 1

Уже давно хотел избавиться от упоминания в запросах sql конструкций.

Но построение через хеши условий для поиска в нынейней версии RoR(2.1) к сожалению не возможно.

Такие запросы типа: Строка по маске, больше чем, меньше чем, больше, находиться в диапазоне, не находиться в диапазоне - построить с помощью хешей невозможно.

Объединение условий по OR опять же сводилось к написанию SQL.

Плагин conditions_fu расширяет возможности ActiveRecord::Base#find методами позволяющими решить вышеуказнные проблемы.

Установка

$ script/plugin install git://github.com/xgamerx/conditions_fu.git

Использование
Person.all(:conditions => { :age.gt => 30, :name.like => "%упкин" })

найдет всех кто заканчивается на "упкин" старше 30 лет

Person.any(:conditions => { :age.gt => 30, :name.like => Person.all(:conditions => { :age.gt => 30, :name.like => "%name%" })
 })
найдет всех старше 30 лет или чье имя заканчивается на "упкин"
Подробней и перечень операторов можно посомтреть тут rubyhammer.com/articles/2008-08-20-182530-conditions_fu-postroitel-zaprosov

Отношение многие-ко-многим в рамках одной модели

Date2008-08-13 UserRoman V. Babenko Commentкоментарии 1

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

Ruby  CMF  Web 
    \  |  / 
     \_|_/ 
     Rails 
     / | \ 
    /  |  \ 
  AR  AV   AC

Создадим миграцию для модели категорий


class CreateCategories < ActiveRecord::Migration
def self.up
create_table :categories do |t|
t.column :name, :string

t.timestamps
end
end

def self.down
drop_table :categories
end
end

Создадим миграцию для таблицы со связями


class Relations < ActiveRecord::Migration
def self.up
create_table :relations, :id => false do |t|
t.column :parent_id, :integer
t.column :child_id, :integer
end
end

def self.down
drop table :relations
end
end

Основной интерес составляет модель категорий и декларация связей has_and_belongs_to_many через вышеупомянутую таблицу.


class Category < ActiveRecord::Base
has_and_belongs_to_many :parents,
:join_table => 'relations',
:foreign_key => 'parent_id',
:association_foreign_key => 'child_id',
:class_name =>'Category'

has_and_belongs_to_many :children,
:join_table => 'relations',
:foreign_key => 'child_id',
:association_foreign_key => 'parent_id',
:name => 'Category'
end

Миграция заполняющая тестовые данные моделирующиее граф указанный на картинке


class TestDataGenerate < ActiveRecord::Migration
def self.up
c_ruby = Category.create :name => 'Ruby'
c_cmf = Category.create :name => 'CMF'
c_web = Category.create :name => 'WEB'

c_rails = Category.create :name => 'Rails'

c_ar = Category.create :name => 'AR'
c_av = Category.create :name => 'AV'
c_ac = Category.create :name => 'AC'

c_rails.parents << [c_ruby, c_cmf, c_web]

c_rails.children << [c_ar, c_av, c_ac]
end

def self.down

end
end

Переходим в консоль и проверяем правильность выполнения поставленной задачи. Находим категорию Rails и запрашиваем у нее имена(для краткости вывода) дочерних и родительских категорий.

>> rs = Category.find_by_name('Rails')
=> #
 >> rs.children.find :all, :select => :name
 => [#, #, #]
 >> rs.parents.find :all, :select => :name
 => [#, #, #]

Хочу отметить, что такое решение являеться независимым от синтаксиса SQL большенства реляционных БД отвечающим стандарту SQL92.

Другие варианты решения и нюансы описаны в статьях:

* http://szeryf.wordpress.com/2007/06/27/self-referential-many-to-many-relations-in-ruby-on-rails/

* http://wiki.rubyonrails.org/rails/pages/HowToCreateASelfReferentialManyToManyRelationship

Существует решение в виде плагина: http://tammersaleh.com/posts/acts_as_graph

Но как пишет его автор, плагин давно не тестировался.

P.S. acts_as_graph -реализует рекурсивный обход графа. 

Про мышей или "шеф все пропало" :-)

Date2008-08-06 UserRoman V. Babenko Commentкоментарии 1

Немно смешно и грустно. Но иногда встречаются посты на тему "все не работает".

Кот в сапогах попросил людоеда превратиться в мышь.

- Да. Ответил людоед. ОП - и.... превратился в мышь...

- Кот кинулся на мышь .... а мыш взлетела и повисла на потолке... потому как _летучей_ оказалась !

 

Вывод: если хотите получить правильный результат, то максимально точно формулируйте задачу...

Платформа: win, nix  ?

Версия rails ?

Хостинг или локальное использование ?

Версия базы данных ?

Кодировка базы данных ?

 

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

Каждая мелочь приближает вас с решению вашей проблемы :-)

P.S. "шеф все пропало" - приключения капитана Врунгеля :-)

Tag_blue
RssAtom RssRss
Реклама: autocad надувные матрасы вид
Ключевые слова:
Гости: 656 Онлайн: Ruslan Voloshin,
Rambler's Top100
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008