января 8, 2013 | Published in In English, PostgreSQL, Базы данных
A few months ago I throught about migrating from MySQL to PostgreSQL. PostgeSQL has more features and is fast, stable and secure relative DB. And it is also free, open-source and has many different extensions. The main drawback of PostgreSQL is that it is more complicated than MySQL, so you should spend more time to learn how to work with it or hire an admin.
In this series of articles I want to describe how to drop MySQL, start to use PostgreSQL and how to be happy with this powerfull solution without hiring a DBA (only if you doesnt work with big and high-loaded projects).
Let’s start by installing PostgreSQL on your development machine.
I work on Ubuntu Linux 12.10 so I will describe process of installing PostgreSQL on Ubuntu 12.10. To install PostgreSQL 9.2 on your Ubuntu you should use this command in your terminal:
$ sudo apt-get install postgresql-9.2
After installing PostgreSQL you can check PostgreSQL version on your machine:
$ psql —version
psql (PostgreSQL) 9.2.2
So now you have PostgreSQL installed on your Ubuntu 12.10 machine. Read the rest of this entry »
апреля 26, 2012 | Published in Ruby on Rails, Ruby on Rails 3, Базы данных
Ассоциации между моделями ч. 1. В этой статьи мы поговорим об интересных параметрах и возможностях ассоциаций моделей.
Псевдонимы
Часто бывает необходимо или желательно использовать отличное от имени модели имя ассоциации. Например у нас есть две модели Store и User и у Store имеется владелец (seller — продавец). store.user выглядит не очень красиво, как буд-то речь идет о пользователе магазина, а не о его владельце (продавце), кроме того, у нас может быть несколько ассоциаций с моделью User, например у нас может быть buyer и seller.
Read the rest of this entry »
апреля 21, 2012 | Published in BDD, Development Processes, RSpec, Ruby, Ruby on Rails, Ruby on Rails 3, Базы данных, Основы, Тестирование
В этой статье мы рассмотрим:
- Установку Git
- Установку RVM - Ruby Version Manager для возможности работы с несколькими версиями Ruby, а также наборами библиотек Ruby - Gem’ами.
- Установку собственно Ruby: Ruby 1.8.7 и Ruby 1.9.3
- Установку SQLite, MySQL, PostgreSQL
- Установку фреймворка Ruby on Rails 3.2 и его зависимостей
- Установку Node.js как среду выполнения JavaScript
- Создание нового проекта Rails
- Работу с зависимостями проекта
- Настройку тестового окружения и написание простых спецификаций и тестов
- Написание кода приложения по спецификациям
- Установку Nginx и Unicorn, и запуск приложения Rails на Unicorn и Nginx прокси
- Работу с удаленным репозиторием
- Работу с Continuous Integration (CI) сервером - Travis
Read the rest of this entry »
апреля 5, 2012 | Published in Ruby on Rails, Ruby on Rails 3, Базы данных
Ассоциации между моделями ч. 2. Экземпляры моделей представляют собой сущности реального мира, а ассоциации между ними являются ни чем иным как отношениями этих сущностей между собой.
ActiveRecord предоставляет несколько возможных ассоциаций (типов отношений) между моделями и все они представлены ниже.
belongs_to — принадлежность другой модели. Пример:
class Post < ActiveRecord::Base
belongs_to :category
end
Read the rest of this entry »
марта 27, 2012 | Published in PostgreSQL, Базы данных
1. Открываем консоль и вбиваем команду инсталяции:
$ sudo apt-get install postgresql-9.1 postgresql-server-dev-9.1
2. После того, как установка завершилась устанавливаем драйвер для Ruby:
$ gem install pg
Successfully installed pg-0.13.2
3. Пробуем запустить консоль PostgreSQL:
$ psql
psql: FATAL: role «vladimir» does not exist
$ sudo psql
psql: FATAL: role «root» does not exist Read the rest of this entry »
февраля 10, 2012 | Published in Ruby on Rails, Ruby on Rails 3, Базы данных
RubyDev — ваш друг в изучении Ruby и Rails!
Что такое модель?
Модель — это составляющая часть архитектурного паттерна MVC, которая хранит бизнес логику. В вашем приложении все модели должны храниться в директории app/models в отдельных файлах, имена которых должны соответствовать имени модели, например: Post -> post.rb, InvoiceProduct -> invoice_product.rb.
Как связаны модель и таблица?
В большинстве случаев модель ассоциируется с определенной таблицей в базе данных, например модель Post будет ассоциироваться с таблицей posts. Экземпляр модели являет собой объект представляющий одну запись из таблицы, а сама модель (класс) используется для работы со всей таблицей, например для поиска всех записей соответствующих некоторому условию.
Обратите внимание на то, как называется модель и как называется соответствующая ей таблица. Имя модели — всегда в едином числе, а имя таблицы во множественном.
Как создать модель?
Создать модель можно вручную, но лично я предпочитаю использовать генератор моделей:
$ rails g model Product name:string description:text price:integer
invoke active_record
create db/migrate/20120210115708_create_products.rb
create app/models/product.rb
invoke test_unit
create test/unit/product_test.rb
create test/fixtures/products.yml
Вызывая генератор я передаю в него в качестве аргументов имя модели и имена полей таблицы ассоциируемой с моделью вместе с типами данных этих полей (столбцов).
Генератор модели мне кажется более удобным потому, что одной командой я создаю сразу все необходимые для работы файлы: собственно модель, миграцию для создания соответствующей модели таблицы в БД, файл фикстур и болванку для написания тестов.
Read the rest of this entry »
декабря 28, 2011 | Published in MongoDB, Базы данных
В этой статье мы подробнее рассмотрим ранее описанные метод .find() и объекта запроса.
Методы .find() и .findOne() используются соответственно для поиска всех документов и поиска первого документа, что соответствуют запросу.
db.posts.find()
/*
{ "_id" : ObjectId("4ef64c526e06ee4cec3dab4e"), "title" : "Title for post # 1", "content" : "Content for post # 1" }
{ "_id" : ObjectId("4ef64c526e06ee4cec3dab4f"), "title" : "Title for post # 2", "content" : "Content for post # 2" }
...
{ "_id" : ObjectId("4ef714746dca6d809b6f4cdd"), "title" : "Title #9", "content" : "Content #9" }
{ "_id" : ObjectId("4ef714746dca6d809b6f4cde"), "title" : "Title #10", "content" : "Content #10" }
*/
db.posts.find().count() //20
Read the rest of this entry »
декабря 25, 2011 | Published in MongoDB, Базы данных
Работая с MongoDB у нас имеется базовый объект — db, который представляет собой саму базу данных, точнее является ссылкой на одну из имеющихся баз данных (по умолчанию, запуская консоль это база данных с именем test). Далелее идут коллекции документов, использую dot-нотацию получаем доступ к коллекции следующим образом:
> db.collection_name
Коллекции представляют собой наборы документов или вложенных коллекций. Обратиться к документу можно используя различные запросы.
Read the rest of this entry »
декабря 24, 2011 | Published in MongoDB, Базы данных
MongoDB — это документо-ориентированная база данных. Если в реляционных базах данных мы используем строки (записи) и таблицы, то для MongoDB можно провести параллель с документами и коллекциями.
Преимуществом документо-ориентированных БД вроде MongoDB является то, что документы могут содержать произвольное количество атрибутов, значением некоторых из которых могут быть другие документы, вместо использования записей и индексов — которые используются как ссылки для ассоциирования записей из различных таблиц между собой. Кроме того, MongoDB — очень гибкое и расширяемое решение для хранения данных.
Почему MongoDB
MongoDB — очень популярное и достаточно стабильное решение, которое широко используется в production окружении там, где нужна высокая производительность и где не подходят или плохо подходят реляционные базы данных.
Read the rest of this entry »
июня 30, 2011 | Published in Ruby on Rails, Ruby on Rails 3, Базы данных
ActiveRecord — просто замечательный инструмент для простых запросов. Тем не менее иногда во имя производительности приходится отказаться от всех преимуществ предоставляемых ActiveRecord и снизойти до использования SQL.
Рассмотрим пример. У вас имеются пользователи и проекты. Пользователи могут принадлежать многим проектам через объединенную таблицу memberships. Какой наш виигрыш? Все пользователи, которые не связаны с проектами. Схема таблицы:
create_table :users, :force => true do |t|
end
create_table :memberships, :force => true do |t|
t.integer :user_id
t.integer :project_id
end
create_table :project, :force => true do |t|
end
Read the rest of this entry »