Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/aristofun/azbuker

Код книжного классифайда для прокачки rails разработчиков
https://github.com/aristofun/azbuker

Last synced: 18 days ago
JSON representation

Код книжного классифайда для прокачки rails разработчиков

Awesome Lists containing this project

README

        

# Книжная доска объявлений

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

Улучшая проект, ты нарабатываешь скилл, репутацию и строчки в резюме!

Из технических решений тут есть: полнотекстовый поиск, полуавтоматическое утягивание базы книжек и обложек
с Озона, добавление нового объявления в один клик, отправка сообщений продавцам на почту, немного кэширования.

Проект выложен в open source с целью привлечения всех неравнодушных к развитию проекта.
Сделано в рамках программы стажировки [«Хорошего программиста»](http://goodprogrammer.ru).
Как поучаствовать в проекте — читай [в разделе ниже](#Как-участвовать-в-проекте).

Автор проект Михаил Бутлицкий, о правах на использование кода [в конце](#лицензия-и-права). Вопросы — на почту [email protected]

# Установка проекта

Проект пока работает на Ruby 2.1.5, Rails 3, Postgres 9.6 и живет по адресу [azbuker.ru](http://azbuker.ru).
Для локальной работы и тестирования тоже нужен постгрес.

### 1. Подготовка
Установить и инициализировать (крайне желательно с локалью ru_RU.UTF-8) Postgres не ниже 9.4

На маке есть чудный [Postgres.app](https://postgresapp.com/), на линуксе — смотрите наши
уроки [раз](https://www.youtube.com/watch?v=aJLRnDJ2CVg) и [два](https://www.youtube.com/watch?v=xg-oB5kzTMY),

Если вы на Windows — сперва изучите [это](https://www.youtube.com/watch?v=vY9QNwX_IsY), потом [это](https://www.youtube.com/watch?v=tQLpAefAKuA),
и напоследок [это](https://www.youtube.com/watch?v=ZqNIpli5JGI).

С помощью RBENV/RVM установить Ruby 2.1.5

### 2. Код

* Скачиваем код
* `bundle install`
* `bundle exec rake db:migrate`
* Делаем свои файлы `.env` и `config/database.yml` аналогично примерам
* `.env` заполняем сразу, конфиг базы — след. шаг

### 3. Данные

* Следуем инструкции из комментариев файла `config/database.example.yml`
* После создания баз — создаем свою копию `config/database.yml`
* Убеждаемся, что локально есть контакт `bundle exec rails c`

В принципе можно запускать и играться локально, но можно накидать немножко обложек из Озона.
В корне проекта лежит небольшой фрагмент боевой базы `ozbooks.zip`.

После распаковки надо скормить его в вашу дев. базу.

```
psql -f (путь к файлу azbuker_oz_books) (имя вашей dev базы азбукера)
```

После чего в автосаджесте при добавлении нового лота можно искать книги например *Стивен* и *Томас*

### 4. Деплой

Изучите deploy.rb и Capfile. Деплоить на свой хостинг есть смысл для тестов только если
хотите мигрировать на новые рельсы и новый капистрано.

# Как участвовать в проекте

Приглашаются начинающие и опытные разработчики. Пока все желающие, но приоритет у студентов
и выпускников наших [интенсивов по Ruby on Rails](http://goodprogrammer.ru/rails-winter-19?utm_source=github.com&utm_medium=readme&utm_campaign=azbuker).

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

Основной ваш вклад в проект — пулл-реквест с полезным кодом или Issue (https://github.com/aristofun/azbuker/issues)
если это не связанное с кодом улучшение.

Поддержки и помощи искать в [телеграм-чате Хорошего программиста](https://t.me/joinchat/AAcu1URhHcFIIokSxGP1vQ).

**Внимание**, тут вас не будут учить программировать (для этого есть [курсы](http://goodprogrammer.ru)).
Тут вы должны **приносить пользу**.

# Как приносить пользу?

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

А значит ваш труд по улучшнию проекта нужен людям. И главное — каждая активность это хорошая **строчка в резюме**.

### Для нубов
* Документирование проекта (вики — как работает сбор обложек с озона, какие есть кастомные rake таски, диаграмма зависимостей между моделями)
* Перевод документации (вот этого ридми например) на английский
* Исправление кодстайла и мелких ошибок, некрасивостей в коде (тысячи их!)
* Комментирование особо сложных и опасных мест в коде (такого тоже полно)
* Рефакторинг и упрощение тестов
* Написание дополнительных тестов

### Для продвинутых
* Миграция на свежие Rails, свежие капистрано и пр. (глобальная и крутая для скилла задача)
* Автоматизация (или переделка) импорта свежих озоновских книжек
* Рефакторинг кода, избавление от костылей и code smell
* Выделение Service Objects и отделение логики обработки объявлений от веб-представлений
* Миграция на последний Bootstrap
* Избавление от старой админки (прикручивание новой?)
* Поиск и исправление уязвимостей в коде

# Лицензия и права

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

#### Поддержка Ansible
Добавлена для внутреннего употребления, для удобного деплоя и развертки на новых нодах.

##### 1

New ubuntu 16 node must be ready and have all system services installed.

```
ansible-playbook .ansible/books/azbuker.yml -e "domigrate=yes"
```

domigrate option copies all capistrano files from current azbuker node and closes the old node on maintenance

Manually put old node to maintenance mode:

```
cap deploy:web:disable cap_host=88.99.172.149 cap_ruby=2.1.5 cap_apps_dir='/usr/sites'
```

##### 2

Migrate all data:

```
ansible-playbook .ansible/books/pgdump.yml -l current -e "pgdump_remote=yes dump_ozbooks=yes"
ansible-playbook .ansible/books/pgrestore.yml -l new -e "pgdump_remote=yes dump_ozbooks=yes"
```

NOTE: different sudo pass on different nodes.

##### 3

- Update DNS, SPF, DKIM records, Reverse DNS
- wait until DNS propagates
- shutdown and drop old node

```
cap deploy:web:enable
```

##### Ansible DB backup

# DB backup & restore

DB backup to local `/tmp/pgdumps/*.bz2`:

```
ansible-playbook .ansible/books/pgdump.yml -l current|new [-e "dump_ozbooks=yes"]
```

Restore from local `/tmp/pgdumps/*.bz2`:

```
ansible-playbook .ansible/books/pgrestore.yml -l current|new [-e "dump_ozbooks=yes"]
```