
Fedor
07.08.2017
07:04:53
более подробно могу попробовать объяснить, если подробнее распишешь что тебе надо
но вообще можешь посмотреть, как делают flash messages на бутстрапе
там обычно во вьюхе делается flash.each {|f| render_flash(f) } и соответсвенно если флэши есть, то они отрендарятся и отобразятся на странице
но они никуда не исчезнут и их надо будет закрыть руками

Google

Nikita
07.08.2017
07:07:39
@FedorKoshel да не, мой попап - это как раз таки статический html и мне его нужно рисовать
вот и я спрашиваю - как через контроллер рисовать его поверх вьюхи?

Fedor
07.08.2017
07:08:58
ну просто делаешь в контроллере какой-то флаг, и потом во вьюхе его проверяешь и подключаешь партиал с попапом
или можно сделать в контроллере метод с проверкой, и cделать его helper_method
и вызывать из вьюхи вместо хэлдпера

Nikita
07.08.2017
07:14:41
ну примерно понял, спасибо

ojab
07.08.2017
07:51:33

Di
07.08.2017
07:52:27
Народ, подскажите плз по такому моменту. Есть куча мелких кусков кода в проекте для фоновой обработки. Сейчас это сделано тредами, но есть желание переделать это на background jobs.
Но для каждого куска кода заводить воркера отдельного мне кажется не удобно.
И возникла идея сделать некую общую джобу, туда просто передавать в блоке кусок кода для фоновой работы, а в самой джобе просто йелдить блок. Это вообще законно?

ojab
07.08.2017
07:56:40
вообще не очень, в общем случае джобы сериализуются после постановки в очередь и десерилизуются перед выполнением
твой код сериализоваться не может, очевидно
с какими-то job adapter'ами, может, сработает

Di
07.08.2017
08:05:00
Пичалька. А как тогда лучше сделать? Писать сто воркеров по одной строчке кода грустняво.

ojab
07.08.2017
08:07:30
А зачем их вообще переделываться на background jobs?

Google

Di
07.08.2017
08:31:49
Память утекает. Мне подсказывали что когда active record работает в треде она не всегда закрывает соединение с бд, у нас растет пул постгреса до неприличных величин.
А сайдкик и бэкграунд джобы вроде как стильно, модно, молодежно, вот и думал на них переехать.
Либо как вариант попробовать явно ActiveRecord::Base.connection_pool.release_connection делать.

ojab
07.08.2017
08:34:38
Есть http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html#method-i-with_connection который сам отдаёт соединения после завершения block'а

Fedor
07.08.2017
08:35:03
ага, или можно подчищать в треде ручками
или, если вам не нужно совместное использование данных, выкидывать в процессы, что бы система за ними сама подчищала
только надо их максимально тонкими сделать
я когда-то так боролся с капибарой, у нее при использовании phantomjs тоже память течет

ojab
07.08.2017
08:36:49
но, опять же, непонятно как оно сейчас используется и получится ли

Di
07.08.2017
08:59:25

ojab
07.08.2017
09:00:59
ага, то бишь надо смотреть как/какие аргументы передаются и пр.

Fedor
07.08.2017
09:03:13
А это как?
у поток в отличии от процессов общее адресное пространство в рамках системы, и иногда именно ради этого ими и пользуются, что бы в разных потоках менять одни и те же данные
хотя это далеко не тривиальный процесс, поскольку это один сплошной рейс кондишен
если это не нужно, то перейти от потоков к процессам можно практически без потерь
но, за счет разделения ресурсов, потоки инициализируются быстрее процессов
поэтому я и писал, что процессы надо делать максимально легкими и быстрыми

Di
07.08.2017
09:05:04
А, вот оно что. Ну это про мьютексы и прочее высшее кунгфу?
У меня да, проще, поэтому наверное на процессы переписать было бы правильнее.
Ну чтобы не писать воркера на каждый чих.

Fedor
07.08.2017
09:09:03

Google

Fedor
07.08.2017
09:09:25
если сделать что-то вроде rails c то можно наглядно увидеть сколько времени инициализируется релься
если в этой фоновой джобе тоже инициализируется рельса, то это гигантская задержка будет
надо писать в виде обычного ruby скрипта с подключением необходимого минимума модулей

Di
07.08.2017
09:16:05
Да, интересно. Ньюансы everywere )

Vadim
07.08.2017
09:29:38
Ребята, никто не сталкивался с такой проблемой ?
Переодически возникает такая ситуация:
1. делаем первый деплой через капистрану
2. сразу делаем второй деплой через капистрану и получаем ошибку
ActiveRecord::ConcurrentMigrationError
Cannot run migrations because another migration process is currently running.
Деплой идет через CI гитлаба
БД - Postgres
Как убить этот лок в постгресе? Из-за чего такое может получаться?

ojab
07.08.2017
09:35:40
миграция от первого деплоя ещё не завершилась, очевидно

Fedor
07.08.2017
09:36:01
+
не надо делать два деплоя подряд

Vadim
07.08.2017
09:36:15
Но это как-то странно, ведь деплой закончен

Fedor
07.08.2017
09:37:01
похоже, либо не закончен, либо что-то пошло не так

Vadim
07.08.2017
09:38:31
В предыдушем деплое, было такое:
00:07 deploy:migrate
[deploy:migrate] Run rake db:migrate
00:07 deploy:migrating
01 ~/.rvm/bin/rvm default do bundle exec rake db:migrate
01 WARNING: you don't own a lock of type ExclusiveLock
✔️ 01 deploy@xx.xxx.xxx.xxx 3.362s
Что в первом, что во втором деплое - новых файлов миграции не создавалось

Fedor
07.08.2017
09:41:26
скинь миграцию на гист
похоже на блокировку на уровне базы
миграция пытается обновить залоченную строку и снять блокировку, а база не дает

Vadim
07.08.2017
09:43:10
я же и говорю, что миграции нет )
были внесены измения только в модели в обоих деплоях
Да, похоже на блокировку на уровне БД

Fedor
07.08.2017
09:44:03
эм...
так что тогда делает мигрэйт, если миграций нет?
он по идее должен сверять списко и если ничего нет, то ничего не делать

Google

Fedor
07.08.2017
09:44:42
или у вас schema_migration залочен на чтение????

Vadim
07.08.2017
09:45:42
капистрана при каждом деплое пишет ~/.rvm/bin/rvm default do bundle exec rake db:migrate
Если миграций нет, то идет следующий этап, если есть - то запускается миграция
schema_migration не залочен для чтения

Fedor
07.08.2017
09:47:07
это она говорит о том, что использует гемы из бандла и руби дефолтный из rvm
просто сообщает о запуске команды
после чего происходит выполнение команды, в котором проверяется список микраций и если есть невыполненные, то прогоняются

Vadim
07.08.2017
09:47:53
это я понимаю )

Fedor
07.08.2017
09:48:16
попробуйте сделать rake db:migrate:status

Admin
ERROR: S client not available

Fedor
07.08.2017
09:48:18
на проде

Vadim
07.08.2017
09:48:20
сек

Fedor
07.08.2017
09:48:23
в production окружении

Vadim
07.08.2017
09:51:09
Блин, походу лок в БД по таймауту умер, сейчас деплой проходит
и rake db:migrate:status на все миграции сейчас выдает UP
не каждый раз происходит этот лок, сейчас он ушел и все снова заработало, но переодически такая фигня вылезает

Alex
07.08.2017
10:18:09
Последний момент остался непонятный. Как при добавлении в избранное альбома, добавлять и все треки входящие в него? Так чтобы, в случае добавления новых треков в альбом, они тоже оказаывались в избранных пользователя?
Ребят, прошу помощи
Есть 3 модели: Юзер, Альбом, Трек
Юзер может добавить в избранное либо альбом целиком, либо треки по отдельности. Часть с альбомами сделал HABTM. А вот с треками не могу догадатся.

Fedor
07.08.2017
10:22:01
используй обзерверы
это что-то вроде колбэков, но не совсем

Adamtsov
07.08.2017
10:23:23

Fedor
07.08.2017
10:23:39
у тебя же нетривиальная логика, надо выпилить трек из избранного у пользователей, которые отцепили альбом, и добавить тем, которые наоборот подключили

Google

Fedor
07.08.2017
10:24:11
лучшее ее вытащить в обсервер

Alex
07.08.2017
10:24:33
Понял, пойду гуглить. Спасибо!

Fedor
07.08.2017
10:24:40
не за что

ojab
07.08.2017
10:29:52
А зачем тут городить нетривиальную логику и HABTM?

Fedor
07.08.2017
10:30:49
ну я так понял, что там пришли к решению цеплять к пользователю треки, причем желать это при подключении альбомов
тоесть тригер вызывает альбом, а подключать надо треки, или отключать

ojab
07.08.2017
10:31:09
User has_many :albums, :tracks, все треки получать через условный tracks.or(Track.where(album: albums))

Fedor
07.08.2017
10:31:58
а что делать если трек исключается из альбома, или включается в другой альбом?
хотя я, возможно уже переусложняю, не знаю, какая там логика на самом деле есть )

ojab
07.08.2017
10:38:33
эм, на счёт has_many я затупил, да (в смысле album не belongs_to :user). Но получение треков от этого не меняется.

v
07.08.2017
11:14:46
@davydovanton тебе не кажется, что в шутках про RubyEE все меньше доля шутки?

Anton
07.08.2017
11:14:54
не
ну, если ты про контейнеры сейчас, то они реально работают
и они позволяют делать очень крутые штуки
об этом даже Jim Weirich писал, а это один из крутейших людей в руби комьюнити

Антон
07.08.2017
15:41:43

v
07.08.2017
15:43:02
? Размещение вакансий запрещено. Если хотите разместить вакансию - https://telegram.me/rubyjob

Denis
07.08.2017
20:58:28
Хочу переставать деплоить вручную. Держать отдельный докер контейнер для каждого приложения это нормально? Чтобы для дева и продакшене были разные набор конфигураций.

rekero
07.08.2017
21:00:47
Да

Jonas
07.08.2017
22:29:34
Я использую simple token authentication gem для аутентификации devise юзеров. Юзеры заходят с помощью username, которая имеет значение кириллицы. Когда я хочу удалить сессию я в http заголовках пишу токен и хедер 'X-User-Username' (как в доках гема): со значением username. Проблема в том что хедер не принимает кириллицу а латинницу принимает. Как сделать так чтобы он принимал хедер которая несет в себе значение кириллицой?