Deliver_later

На одному проекті інтернет-магазину виникали помилка після завершення оформлення замовлення. В момент надсилання email повідомлення адміністратору магазину про нове замовлення, відбулась проблема з'єднання із SMTP-сервером, в наслідок чого користувач бачив у браузері помилку

Теоретично такого не мало б відбутися, оскільки за змовчанням у ActiveJob використовується ansync адаптер і виклик методу deliver_later мав би виконатися у фоновому режимі

Але ActiveJob виконувався синхроно, було б добре розібратися чому саме так.

Для вирішення даної проблеми, використаємо gem sidekiq який дозволяє rails породжувати нові процеси, які будуть працювати у фоновому режимі.  В основі гема задіяна модель акторів. Його інсталяція досить проста – додати гем в Gemfile:

Вказуємо сервер черги у config/application.rb:

Інсталюємо Redis сервер

Оскільки отримання email'а є важливим, задаю 100 спроб у разі невдачі

В development середовищі запускається досить просто:

Перевірка показала асинхронну роботу

Для деплоя добавляємо у Gemfile gem:

Добавляємо в Capfile

Як бачимо у нас буде інтегація з monit, який буде запускати sidekiq у разі його падіння, тому на продакшені інсталюємо його

В /etc/monit/monitrc дозволяємо http для localhost'у

Та перезапускаємо 

Action Mailer використовує чергу mailers, задаємо її для sidekiq у config/deploy.rb

Далі деплоємо проект

Deploy Ruby on Rails – Nginx/Passenger/Postgres/Capistrano (ОНОВЛЕНО)

Приклад деплоя app на Ruby On Rails

В даній замітці розглядається приклад деплою проетку під назвою tools на  VPS-сервер Ubuntu 17.04 в каталог /home/deployer/apps/project/, код проекту знаходиться на git-сервері bitbucket.org у приватному репозиторію. Використовуємо Ruby 2.4.0 та Ruby On Rails 5

Continue reading

Робоче середовище Ruby on Rails програміста

Для плідної роботи Ruby-програміста, одного знання мови програмування не є достатнім. Потрібно мати ПК, встановлену ОС Linux та налаштоване середовище. Якщо ви працюєте за одним робочим місцем, то тут все досить просто – інсталюємо, налаштовуємо. Мені часто приходиться працювати за різними ПК, варіант на кожному ПК ставити Linux відпадає одразу, також налаштування середовища можливе, але затратно по часу. Тому я вибрав варіант віддаленого робочого столу.

Інсталяція ОС

Я інсталював у віртуалку(KVM) Xubuntu 17.04 64x офіційний варіант дистрибутиву Ubuntu, котрий в якості робочого середовища використовує xfce. Згідно wikipedia Xubuntu призначено для малопотужних комп'ютерів, або для тих, хто бажає отримати більшу швидкодію і використовує здебільшого застосунки GTK+.

Віддалений робочий стіл на XRDP

Згідно вікіпедії, RDP-протол, це  протокол прикладного рівня, що використовується для забезпечення віддаленої роботи користувача із сервером, на котрому запущений сервіс термінальних з'єднань. Клієнти існують практично для всіх версій Windows (включаючи Windows CE та Mobile), Linux, FreeBSD, Mac OS X. За замовчанням, використовується порт TCP 3389. Офіційна назва Майкрософт для клієнтського ПЗ — Remote Desktop Connection або Terminal Services Client (TSC), зокрема, клієнт у Windows XP/2003/Vista називається mstsc.exe.

Налаштовуємо локаль

База даних (PostgresSql)

Інсталяція

Налаштування аутентифікації знаходятся у файлі /etc/postgresql/9.3/main/pg_hba.conf

Цей рядок говорить про те, що користувач Postgres може підключатися до будь-якій базі даних локальної СУБД PostgreSQL через сокет(налаштування за змовчанням). Пароль при цьому вводити не потрібно, операційна система передасть ім'я користувача, і воно буде використано для аутентифікації.

Підключення до БД:

Щоб мати можливість підключатися по мережі, потрібно в pg_hdba.conf додати рядок:

Також редагуємо рядок до такого виду

що дасть можливість локально підключатися по логіну та паролю

Метод аутентифікації MD5 означає, що для підключення доведеться ввести пароль.

Створення нового користувача/бази/права PostgreSQL

Якщо користувач є власником (owner) бази даних, то у нього є всі права. Але якщо ви хочете дати доступ іншому користувачеві, то зробити це можна за допомогою команди GRANT. Запит нижче дозволить користувачеві підключатися до бази даних. Але не забувайте про конфігураційному файлі pg_hba.conf, в ньому теж повинні бути відповідні дозволи на підключення.

Dump/Restore

Виконання дампу БД mybd у файл

Виконання restore

або

PgAdmin

Інсталяція менеджера PostgreSQL'я

шкода що немає EMS manager'а під Linux, кращого я не бачив

У мене є проекти на MySql, тому інсталюємо:

Інсталюємо Ruby за допомою rbenv

Для зручності добавляємо аліаси команд в ~/.bashrc

Добавляємо можливість бачити назву текучого branch'у в запрошені консолі

Інсталюємо Sublime text 3

Інсталяція Package control (нажимаємо ctrl + ` та вставляємо взяте з сайту)

 

Корисні налаштування Sublime text 3

Біндимо комбінацію alt+shift+r для форматування коду

Preferences -> Key Bindings – Default

Два пробіля замість табуляції

Preferences → Settings User
{

Корисні інструменти

wwwsqldesigner прототипування БД

Cacoo онлайнінструменту для створення прототипу інтерфейсу

ScreenCloud

Sqliteman

Owl Сarousel кастомізація стрілок

Приклад

 

Добавляємо class до картинки, яку вставляємо в CKEditor’і

ckeditor/config.js
 

 

amazon linux command line

AWS CLI – інтерфейс командного рядка AWS – це єдиний інструмент для управління сервісами AWS. Завантаживши всього один засіб, ви зможете контролювати безліч сервісів AWS з командного рядка та автоматизувати їх за допомогою сценаріїв.

В системі має бути встановлений pip

Встановлення певних заложностей(у мене виникала помилка error: command 'x86_64-linux-gnu-gcc' failed with exit status 1)

Інсталюємо

Після інсталяції виконуємо конфігурування, де вводимо дані для доступу до aws

Довілник по командному рядку

aws-shell  – це програма, що представляє собою зручну і ефективну командну оболонку, яка допоможе як новим, так і досвідченим користувачам інтерфейсу командного рядка AWS. Нижче перераховані основні можливості програми.

 

Spree: send email notification when order completed

Чи то я сліпий вже такий, чи то старість, а може воно є, а я його не знайшов, але така базова річ як сповіщення адміністратора(відповідальної особи) на email в інтернет магазині при створенні нового замовлення мала б бути да хоть гвіздями вбита в код. Але в Spree не бачу і шо тут скажеш….

Приклад реалізації в одному з проектів на Spree: сповіщення усіх юзерів хто має роль адміністратора на email після створення замовлення

 

Continue reading