
Valentin
19.09.2016
14:29:27

I
19.09.2016
14:30:02

Valentin
19.09.2016
14:30:03

s
19.09.2016
14:30:16
зачем локально собирать ассеты при деплое

Google

I
19.09.2016
14:30:19
просто у меня капистрано при деплое ассеты рекомпилит

Valentin
19.09.2016
14:30:30

I
19.09.2016
14:30:30
ну человеку проверить надо было, видимо)

Artur
19.09.2016
14:56:09

s
19.09.2016
14:56:40
тогда тебе не нужна рельса

Evgeny
20.09.2016
07:23:22

ojab
20.09.2016
07:24:02
должен, но не факт что сразу после окончания метода

Evgeny
20.09.2016
07:27:29
А принудительный GC.start не влияет, я даже дамп всего делал, там все данные помечены mark =true , что по логике норм. Не могу понять никак) Я byebug юзал делал там ObjectSpace.each_object и выводил в блоке всех кто больше 10мб вешает, в итоге там был только мой объект yml после дампа и все. Это было в контексте модели
в контроллере уже эти объекты исчезли
Пробовал еще через Thread.new, думал после отработки треда убьются все данные, но опять фиаско
Где то пробел у меня в знаниях)

Антон
20.09.2016
07:29:18
так может вынести это безобразие в отдельный воркер на отдельную логическую машину?

Evgeny
20.09.2016
07:30:36
Тут уже советовали сайдкик например или рейк такс

Google

Evgeny
20.09.2016
07:30:45
Еще не пробовал, думал здесь разберусь

ojab
20.09.2016
07:31:58
вопросы про rails r и иже всё ещё в силе.

Evgeny
20.09.2016
07:32:45
Ну если в консоли проблема та же , то рельсы не причем наверное
раннер еще ниразу не юзал

ojab
20.09.2016
07:34:19
консоль тут вообще лучше не использовать, ибо в ней время жизни объектов будет сильно отличаться от оного в приложении

Evgeny
20.09.2016
07:37:04
Ок раннер еще попробую, только данные попадали же через params, тут еще не смотрел, пошел тестить

Антон
20.09.2016
07:43:12
если время позволяет, то лучше конечно решить проблему на месте
если инстанс под воркера стоит дешевле, и времени нет - имеет смысл отдать обработку воркеру

Evgeny
20.09.2016
07:47:08
Это локалхост серсис) Точнее он будет у меня на работе, могу хоть 10гб озу дать, но это не дело вообще, а мб даже придется виртуалбокс в филиалы отправлять, т.к. инет не стабильный у них. Соотвественно сервис должен быть простой и без лишних заморочек. Если бы был cvs было бы норм. Кстати это твой любимый socit
С их проги выгрузка в dbf в cp866 еще кодировке
я ваще не могу с них

Антон
20.09.2016
07:51:59
тогда может предподготовку сделать не рубями?

Evgeny
20.09.2016
07:55:30
Думал уже, на крайний случай оставил. Есть вариант в программе dbf commander экспортировать в cvs, но они выпенидриваться будут, т.к. усложняется процесс хотя и не много. Щас они макросами в excel делают, но они с этими макросами уже всех достали, смотреть на них не могу. Есть вариант еще на crystal переписать предподготовку, вот там жумаю будет ап раз в пять)

yopp
20.09.2016
07:55:35
вручную управлять памятью

Evgeny
20.09.2016
07:57:47
вручную управлять памятью
Думаю было бы норм, добавить пару методов для ручного управления. Я конечно не эксперт, но думаю в таких ситуациях было бы удобно

yopp
20.09.2016
07:57:52
нет
у тебя код хуёвый
1) YAML.dump <-
2) parse_document
1) зачем делать IO#write когда YAML умеет сам работать с IO?

Google

yopp
20.09.2016
07:59:26
2) зачем делать огромную строку, когда можно сделать enumerable объект

Evgeny
20.09.2016
08:00:07

yopp
20.09.2016
08:02:41
2) ты берёшь и сразу всю таблицу конвертируешь в хеш
зачем?
http://patshaughnessy.net/2013/4/3/ruby-2-0-works-hard-so-you-can-be-lazy

Evgeny
20.09.2016
08:04:02
Это потому что я не научился еще делать по другому. Я в голове понимаю, надо взять сразу и писать в файл верно?

yopp
20.09.2016
08:04:10
потом я не понимаю зачем читать файл целиком
и потом сливать его в DBF
тебе надо открыть файл на чтение, но не читать и передать IO объект в конструктор твоего DBF

Evgeny
20.09.2016
08:05:00
Я не могу его считать не целиком

yopp
20.09.2016
08:05:09
почему?

Evgeny
20.09.2016
08:06:04
Там в доках ничего нет про стрим, а вручную там же не csv , а хренов дбф, там внутри он unpack делает, потом получается уже наша строка длинная и там уже разбивает по колонкам
Я бы конечно взял бы одну колонку, сразу ее спарсил
потом сохранил
и по кругу

yopp
20.09.2016
08:07:25
https://github.com/infused/dbf/blob/master/lib/dbf/table.rb#L249
всё оно нормально умеет через seek/rewind читать

Evgeny
20.09.2016
08:08:13
Эти понятния для меня новые)

yopp
20.09.2016
08:08:31
ну вот надо начать с базовых вещей

Google

yopp
20.09.2016
08:08:41
читать весь файл в память это тупая идея
и это корень твоей проблемы, а не управление памятью

Evgeny
20.09.2016
08:08:59
Я согласен, я хочу научится уже стримингу

yopp
20.09.2016
08:09:05
это не стримниг, господи
короче, я направление тебе указал, разбирайся

Evgeny
20.09.2016
08:10:04
Ок, тяжело в учении - легко в бою

ojab
20.09.2016
08:10:37
чото я сомневаюсь что память тратится именно на этот File.read

yopp
20.09.2016
08:11:04

Admin
ERROR: S client not available

yopp
20.09.2016
08:11:34
там 1 огромная строка для DBF, здоровый хеш и здоровый кусок yaml

Evgeny
20.09.2016
08:11:40
А стриминг тогда что это?)) В моем понимании всегда было типа того: file.each_line { |line| do_somethind(line); save_to_file(line) }

yopp
20.09.2016
08:11:46
по размеру скорее всего ~4x от размера dbf файла в итоге

Evgeny
20.09.2016
08:12:32
File.read не мого съед, 400-500мб на хэш мой вышло и остатки на yaml
файл дбф 90мб

yopp
20.09.2016
08:13:18
ну вот не надо делать огромный хеш
надо сделать lazy enumerable и последовательно читать файл
dbf умеет each
там курсороподбная констуркция

Evgeny
20.09.2016
08:16:03
Поправь если не так(про ленивый енум пока не прочитал):
1) Делаем each первая строка
2) Парсим to_yaml
3) IO.write yaml_line
4) Начинаем с первого пункта
В конце IO.close, если это было сделано не вблоке

Google

yopp
20.09.2016
08:17:24
нет

ojab
20.09.2016
08:20:13
чото я не очень понимаю как предполагается лениво дампить Enumerable в yaml
Если не извращаться с Psych::Emitter

yopp
20.09.2016
08:21:15
вот его и надо
afaik, YAML класс его и использует

Evgeny
20.09.2016
08:26:23
Ок, спс буду курить, с меня пиво или ночлег если будите в моей деревне)

yopp
20.09.2016
08:27:01
будить в твоей деревне я конечно могу

ojab
20.09.2016
08:28:42
вот его и надо
сомнительной полезности оптимизация, если единственная проблема — не освобожление памяти после обработки, ибо с Psych::Emitter очень просто сделать невалидный yaml, например.

Evgeny
20.09.2016
08:29:09
И мб есть какая-то книга по таким тонкостям, а то стандартные только основную работу с руби описывают. Даже в бест практикс не видел такого кажется

yopp
20.09.2016
08:34:47
в этом проблема
он решается генерацией нод on demand вместо запихивания целого хеша в память
потому что хеш целиком не нужн

ojab
20.09.2016
08:38:53
если этот yaml предполагается потом читать — подразумевается что память под целый хеш есть, почему бы не заюзать
если не предполагается — нафиг вообще нужен yaml?

Evgeny
20.09.2016
08:42:53
Ну после чистки yml в 3 раза меньше оригинала. Потом считывание много не отнимает

Антон
20.09.2016
09:05:38
я тут в коде новый смайлик нашел (:[]=)

Danila
20.09.2016
11:04:47
@TurnaviotovNikolay
пропал парень
вышел из руби чатиков
доебали своими тестами