
Vladislav
15.05.2018
05:54:34
Контракты делаются с помощью спек/тестов
Хотя интерфейсы а-ля Go/Rust в рубях зашли бы, я думаю

dima
15.05.2018
06:06:01
утиная типизация же, как они зайдут?

Google

dima
15.05.2018
06:09:14

Andiskiy
15.05.2018
06:11:15
Добрый день. Я делаю емейл рассылку в бэкграунде(более 1к писем), но все равно память жрет. сервер на хероку. Для фоновых задач юзаю sucker_punch. Rails 4.1.6, web-server passenger. Подскажите пожалуйста в чем может быть проблема и в какую сторону копать?

Vladislav
15.05.2018
06:16:00
ты так и не показал инетрфейсы в руби
не нужно путать саму концепцию интерфейсов и ключевое слово interface в java/c#.
Интерфейс - это абстрактная спецификация обязанностей какой-либо логической единицы. В ruby разве такого нет?

dima
15.05.2018
06:24:33

Vladislav
15.05.2018
06:25:13
RSpec.shared_examples "a collection" do
describe "#size" do
it "returns number of elements" do
collection = described_class.new([7, 2, 4])
expect(collection.size).to eq(3)
end
end
end
RSpec.describe Array do
it_behaves_like "a collection"
end
RSpec.describe Set do
it_behaves_like "a collection"
end
Чем не интерфейс?
Функция ничего не специфицирует, она просто делает работу

dima
15.05.2018
06:28:38

Ēľ Ċāƥīāŋ Ƭīʋȷɍēś
15.05.2018
06:29:09

Andiskiy
15.05.2018
06:30:36

Ēľ Ċāƥīāŋ Ƭīʋȷɍēś
15.05.2018
06:31:13

Sergey
15.05.2018
08:58:37
Друзья, товарищи,
подскажите, пожалуйста, как может быть так, что таска
rake db:delete_old_jobs запускается, а из консоли
> Rake::Task['db:delete_old_jobs']
выдает ошибку Don't know how to build task 'db:delete_old_jobs'

Nerzh
15.05.2018
09:01:32

Google

Vladislav
15.05.2018
09:02:21
А что не так с MRI, кроме GIL?

rekero
15.05.2018
09:02:50

Nerzh
15.05.2018
09:03:47
на что нибудь без GIL

Vladislav
15.05.2018
09:04:33
будут guild'ы как решение проблемы GIL
новая версия выходит каждое рождество, значит 3.0 будет в 2022

rekero
15.05.2018
09:05:16
пока на 2038 планируется
?

Vladislav
15.05.2018
09:06:22
Видел) Это с запасом
И новое будет вводиться постепенно
уже вот есть основа для jit и будущих оптимизаций

Sergey
15.05.2018
09:17:45
Разобрался. Нужно было сначала инициализировать все таски через MyAppName::Application.load_tasks
Всем спасибо

ojab
15.05.2018
09:53:06

Nerzh
15.05.2018
09:53:41
та ничем, все в руби прекрасно и память не течет

Vasiliy
15.05.2018
09:54:26
Сама течет
Захотела потекла захотела нет

Nerzh
15.05.2018
09:55:09
захотела потекла легко нашел, легко пофиксил

ojab
15.05.2018
09:55:10

Nerzh
15.05.2018
09:55:34

Google

Nerzh
15.05.2018
09:57:03
иногда пишу на swift и думаю вот бы сейчас что нибудь на руби с GIL пописать

Alex
15.05.2018
09:57:39
А вообще на текущий момент имеет смысл делать не на MRI, а на JRuby долго адаптироваться? Если не на JRuby то на чем, спасибо за развернутые ответы.

Nerzh
15.05.2018
10:01:28

Смерть
15.05.2018
10:21:50


Nikita
15.05.2018
10:53:17
Гайз, есть среди вас гуру в тестах?) Подскажите, пожалуйста по RSpec юнит тестам и Best Practices, касательно вложенных контекстов. Как описывать AND условия?
Пример: Если у магазина (Shop) есть два тарифных плана на выбор и два состояния баланса, как я должен тестировать это? Какая структура тестов необходима?
Вариант 1:
Rspec.describe 'ShopService' do
describe 'when shop plan is startup' do
context 'and balance > 0' do
# Test code
end
context 'and balance == 0' do
# Test code
end
end
describe 'when shop plan is professional' do
context 'and balance > 0' do
# Test code
end
context 'and balance == 0' do
# Test code
end
end
end
Вариант 2:
Rspec.describe 'ShopService' do
describe 'when shop plan is startup and balance > 0' do
# Test code
end
describe 'when shop plan is professional and balance > 0' do
# Test code
end
describe 'when shop plan is startup and balance == 0' do
# Test code
end
describe 'when shop plan is professional and balance == 0' do
# Test code
end
end
Или вообще иначе делать нужно. Не совсем понимаю.
В BetterSpecs не нашел инфы. Гугл тоже дельного не отдает


Смерть
15.05.2018
10:57:04
мне первый вариант нравится
Там и дублирования кода меньше

Nikita
15.05.2018
10:59:33
С другой стороны при появлении еще условий код сильно уезжает вправо?.

Смерть
15.05.2018
11:01:01
Зато в рубимайне будет очень красиво выглядеть результаты в виде дерева

Vasiliy
15.05.2018
11:01:11
эт да
плюс первый удобно запускать изолировано
ты всю группу можешь пускать

Nikita
15.05.2018
11:02:28
И насчет самого оформления: context 'and .....' {}, верно?

Vasiliy
15.05.2018
11:02:28
если номер строки задаешь он во внутрение дискрайбы и контексты входит, с энд такого не получится так явно
да да

Nikita
15.05.2018
11:02:46
Окей, спасибо)
Так и сделаю

Lavrushchik
15.05.2018
11:16:35

Darth
15.05.2018
11:44:29
Да
Форма называется

Oleg
15.05.2018
11:44:43
https://github.com/themilkman/jquery-tablesorter-rails

Google

Sergii
15.05.2018
11:46:24
у меня дататейьблс были и гугльчарт тейблы, они много чего еще умеют
и какой-то платный аналог дататеблсов, бо оно на больщих таблицах кончалось

d0as8
15.05.2018
11:49:57
ку. подскажите. необходимо реализовать демона на базе модели из проекта на рельсах (и желательно с полным окружением и инфраструкторуой проекта). есть какие-нибудь решения?

Sergii
15.05.2018
11:52:23
зачем именно демона, и чем он отличается наприемер от REST API по модели?

d0as8
15.05.2018
11:54:55
нужен некий бекграунд процесс на существующей модели.
его работа не свзяана с обработкой запросов из-вне

Admin
ERROR: S client not available

Sergey
15.05.2018
11:56:00
sidekiq/sneakers/delayed_job и т.д.

d0as8
15.05.2018
12:07:49
ммм... ищу что-то типа ActiveJob но без очереди джобов. хорошо бы его запустить в ендлесс цикле

No
15.05.2018
12:11:36

d0as8
15.05.2018
12:30:42
обрабоока очереди. только она реализована на внешней системе. перетягивать на себя или иметь доп очередь для вызова обработчика - не вариант
наверно что-то типа crono

Lavrushchik
15.05.2018
13:36:28

Darth
15.05.2018
15:48:43
В чём прикол юзать return redirect?

mike
15.05.2018
15:49:12
Если не заюзать ретурн, код продолжит выполнение

Darth
15.05.2018
15:51:03
А, ну да, спасибо

mike
15.05.2018
15:54:27
Не за что

Aleksey
15.05.2018
16:25:20
вопрос на миллион - предложите какое-нибудь оригинальное название для гема, который делает миграции полей в таблицах для рельс (пример: поле зашифровано одним ключом, потом зашифровали другим) ? фантазия сдается что-то

Anton
15.05.2018
16:27:45
Rails field migration

Aleksey
15.05.2018
16:28:45
хорош!

Google

Aleksey
15.05.2018
16:29:03
пожалуй так и назову ? спасибо
вообще там не только про рельсы в планах, там больше про БД вообще

Anton
15.05.2018
16:30:03
У тебя же на рельсовую миграцию завязано все?

Aleksey
15.05.2018
16:30:25
не
идея мигрировать данные на лету, есть поле - foo и есть поле foo_version, где-то в инишиалайзере/конфиге гема/папке специфичных миграций - перечень чего делать чтоб перейти с одной версии поля на другое
ну и при работе с полем смотреть какая там версия , если устаревшая- домигрировать ее без даунтайма до актуальной
отдельные миграции хоть через рельсы хоть через что - это уже опционально

Ed
15.05.2018
16:55:41
Можешь попробовать этот гем
https://github.com/leikind/wice_grid

Lavrushchik
15.05.2018
16:56:55
да я уже рансак юзаю.
счас проблема в том, что при поиске с параметрами перерендеривает, но кнопка сабмита заново данные не отправляет. и хз как пофиксить

Смерть
15.05.2018
17:31:47
Что-то не могу понят. С какой версии рельс есть этот метод? https://www.rubydoc.info/github/rails/rails/ActionDispatch%2FRequest:controller_instance

ojab
15.05.2018
17:37:34
https://github.com/rails/rails/commit/81cfdf2489fe436bb70e0e44c5683c57d0247850 с пятёрочки, до этого его можно было достать из env

Смерть
15.05.2018
17:44:20
блин, а в 4 можно как-то достать инстанс контроллера из объекта реквеста?

ojab
15.05.2018
17:49:48
request.env же

O
15.05.2018
17:50:02
request.env['action_controller.instance']
не работает?

Смерть
15.05.2018
17:51:49
Да, спасибо, оно

Andiskiy
16.05.2018
05:42:52
подскажите пожалуйста, а в resque или sidekiq если сервер падает задачи тоже теряются? например превышена квота памяти, приложение падает, а потом когда просыпается задачи могут выполняться?

Ēľ Ċāƥīāŋ Ƭīʋȷɍēś
16.05.2018
05:45:20