
Ivan
12.08.2017
09:35:33
Да, конечно, о полном даунтайме речи не идет — это был бы вообще криминал. Я просто к тому, что надо рестартовать контейнер каждый раз. Я не могу делать это автоматически в пулле compose так как nginx — это, считай, самостоятельный проект на хосте, который обслуживает несколько проектов.

Adamtsov
12.08.2017
09:38:18
ассетики тоже не при каждом деплои меняются)

Kalbaskin
12.08.2017
12:51:02
Мужики, кто какие базы городов использует?
привет!)

Google

Темур
12.08.2017
13:11:31
фиас

Kalbaskin
12.08.2017
13:40:36
Раньше был citieslist.ru с базой из вк. щас он уже лежит

v
12.08.2017
13:42:55
dadata выручает

Vasiliy
12.08.2017
13:44:19
С дадатой работали - вообще отлично(если у себя базу хранить не надо)
До этого облачный кладр или фиас юзали - гавно, надо отдельно все вбивать, тут одним полем, в коллцентре прям вообще огонь

Kalbaskin
12.08.2017
13:46:37
Мне по сути классификацию по всем населенным пунктам.
Улицы и прочие вещи мне не нужны (безусловно dadata ништяк)

Vasiliy
12.08.2017
13:47:17
Там вроде у ВК в апи можно города запросить, не?

Rafkat
12.08.2017
13:47:29
как лучше тестировать внешний апи?

Kalbaskin
12.08.2017
13:47:56
Есть смысл искать что-то кроме dadata?
Вк в целом норм. Но мне базу себе надо
citieslist.ru как раз имел у себя базу спарсенную с вк.
В принципе есть идея брать полученные данные из dadata, и при первом вхождении сохранять себе)) ничего лишнего)

Nikita
12.08.2017
14:43:40
подскажите пожалуйста, как правильно сделать запрос через AR
есть 2 модели, Mover и Job (has_many, belongs_to), нужно вывести всех Mover, у которых есть хотя бы 1 Job, с полем: status: true

Google

Vasiliy
12.08.2017
15:06:07
В вере передавай хэш
Вере(мовер: {жоб: тру})

Anton
12.08.2017
15:23:03

Fedor
12.08.2017
15:24:36
Mover.joins("inner join jobs")

Vasiliy
12.08.2017
15:43:07
В вере хеш когда с ключом связи кидаешь он автоматом жоины делает, фо ю виф лаф

Sergey
12.08.2017
21:01:13
Разве?
Mover.joins(:jobs).where(jobs: { status: true }).distinct
Вообще, мне ещё нравится в последнее время использовать merge, что можно сделать так:
Mover.joins(:jobs).merge(Job.active), где active - скоуп
Можно ещё where subquery сделать, если distinct не сработает

Максим
12.08.2017
21:45:07
ребзи чё про параллелизм почитать можо? ну руби

Anton
12.08.2017
21:54:41
Гугли книгу "working with ruby threads"

Максим
12.08.2017
21:55:43
загуглю, почитаю
а чего нибудь тпиа статьи какой
или документации

Vasiliy
12.08.2017
22:48:09
Конкурент руби
(наверное)

Максим
13.08.2017
00:46:22
нус пацаны
в понедельник у меня собес на джуна на руби
держите за меня кулаки

Смерть
13.08.2017
00:52:54
Окейси

Tony
13.08.2017
04:48:11
Ребята, привет!
Подскажите как быть. Есть background job который переодически проверяет новость (тянет через rss) и если новость актуальная, мне надо отобразить ее. Чтобы постоянно не отображать, я проверяю ее (храню хэшсумму в redis) и сравниваю, но проблема в том, что не знаю где саму лучше новость хранить, чтобы отобразить. И вообще стоит ли хранить ее, подключать бд для этого. Новость очень маленьая (заголовок, анотация, дата). Вопрос в том, как мне лучше всего организовать отображение актуальной новости?

Google

Nikita
13.08.2017
07:01:49
В бд
И хеш сумму там же по сути можешь хранить вместо реддиса

Anton
13.08.2017
08:05:49
Всем привет) Кто-нибудь делал подключение react компонентов на rails 3?

Vitaliy
13.08.2017
08:15:15

Anton
13.08.2017
08:16:27
этого мы пока себе позволить не можем))

Alex
13.08.2017
09:10:22

Vitaliy
13.08.2017
09:13:11
Через, по гайдам. С текущей тройки ступенчато до последней тройки, потом до 4.0, 4.1, 4.2, 5.0, 5.1
http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html

Alex
13.08.2017
09:46:04
А проект большой? Сколько времени занял апргейд?

Karina
13.08.2017
09:55:47
чуваки, как сделать такое - у меня есть апи для покупки - update - api/purchase/:id и параметры - но чтоб сделать этот самый update нужно пройти опеределенную
валидацию (из контроллера я вызываю service object, а там делаю include гема interactor). А еще есть такое апи update api/purchase/:id/attachments/ ( attachments относиться
к purchase как belongs_to) и параметры. И чтоб сделать update attachment нужно ТОЖЕ провалидировать purchase!!!! Вот чё делать? гем interactor работает таким образом - там пишутся
валидации и переопределяется метод call и в этом методе call объекту присваиваются новые значения. И вот у меня ситуация - у меня новый контроллер для update api/purchase/:id/attachments/
и, блин, ну как мне провалидировать purchase? можно унаследовать service object purchase для service object attachments - но по-моему это не совсем правильно. Есть какие-нибудь идеи?


Aleks
13.08.2017
10:37:13
у тебя отделный вызов api на изменение attachment, и при этом еще состояние purchase неизвестно или меняется?

Karina
13.08.2017
11:27:33

Aleks
13.08.2017
11:35:28

Karina
13.08.2017
11:39:15

Aleks
13.08.2017
11:43:31

Karina
13.08.2017
11:48:39
ну конечно же
purchase же я получить могу по id

Aleks
13.08.2017
12:08:52

Karina
13.08.2017
12:19:37
ну вот и ответ - узнать у purchase в каком он состоянии при валидации attachments. нет?
а как? валидации на purchase находятся в сервис объекте, где инклюдится interactor (гем) - и у этого гема структура такая, что там должен вызываться ТОЛЬКО метод call, который и меняет состояние записи (а остальные методы - валидации и какие-то вспомогательные для метода call). Я ж не могу вызывать в Attachments сервис объект purchase - мне надо вызывать метод call и передавать туда новые данные для purchase - а какие новые данные для purchase, если я изменяю attachments и у меня просто нет новых данных для purchase

Aleks
13.08.2017
12:21:04

Karina
13.08.2017
12:21:14
ну да

Google

Karina
13.08.2017
12:21:32
я только валидации не могу вызвать

Aleks
13.08.2017
12:25:12

Karina
13.08.2017
12:25:54
так валидация только скажет можно этот объект изменять или нет

Aleks
13.08.2017
12:26:26

Karina
13.08.2017
12:27:14
можно. но мне код нельзя дублировать
короче. может можно как-то в этом interacore как-то вынести валидации... походу это единственный выход
ладно, спасибо за помощь
щас что-нибудь буду смотреть

Admin
ERROR: S client not available

Fedor
13.08.2017
12:31:12
Что мешает сделать return unless purchase.valid?
Вообще лучше в модели сделать понятный метод типа can_be_changed? И вызывать его и здесь и в валидации где это проверяется

Karina
13.08.2017
12:36:50

Fedor
13.08.2017
12:39:58
Ну тогда должен быть отдельный интерактор для валидации, и отдельный для всего остального
Иначе эту логику сделали на столько криво, что она нежизнеспособно

No
13.08.2017
12:40:23
Почему нет?

Fedor
13.08.2017
12:41:03
Сервис объекты для того и нужны что бы вызывать их для выполнения одного куска логики

Karina
13.08.2017
12:41:04
Почему нет?
фиг знает. короче, мне надо вкуривать interactor

Fedor
13.08.2017
12:41:14
А не нескольких сразу
Интерактор это просто куча методов с контекстом на входе и выходе

Google

Fedor
13.08.2017
12:41:41
Он простой как топор

No
13.08.2017
12:43:11
Я имею ввиду, что с точки зрения ООП ни капли не зазорно добавить метод в модель если этот метод говорит что-то о состоянии модели

Karina
13.08.2017
12:43:38
короче, надо понять можно ли сделать такое с interactor - вызывать у него только валидации

No
13.08.2017
12:43:54
А слепо следовать "метод в модели плохо" - это уже карго культ

Karina
13.08.2017
12:44:09


Fedor
13.08.2017
12:46:30
ага
это и есть вход )
это как бы черный ящик "сделай мне хорошо" )
ты кладешь туда контекст и получаешь результат на выходе, не думая о том, что внутри
ради этого он и нужен
что бы не думать о его реализации при использовании
и что бы логику дробить на такие вот унитарные черные ящики
и ипользовать их потом
если у тебя две логики в одном интеракторе, то вызвать их по отдельности нельзя
вернее можно, если у тебя в интеракторе есть приватный метод validate то ты можешь сделать InteractorName.new(context).send(:validate)
потому что он попрежнему руби класс и у него можно дергать приватные методы с наружи
но это очень плохо и так никогда делать не надо
и если у тебя две логики валидация и еще что-то в одном интеракторе, то это значит что его надо распилить на два
один будет валидировать, а второй - выполнять логику приложения
и потом вот этот валидатор можно пихать в несколько мест где он нужен