@rubyschool

Страница 469 из 921
Nikolay
02.12.2017
11:20:06
На хероку нельзя загружать файлы

Облака юзать надо

Roman
02.12.2017
11:31:03
Да, уже понял, спасибо

Konstantin
02.12.2017
11:44:35
Ребят, посоветуйте, что можно использовать: я хотел по расписанию (каждые n-часов) запускать worker (sidekiq) я так понял такая фича есть только в самой дорогой версии sidekiq, есть ли что-то бесплатное?

Google
Fedor
02.12.2017
11:45:01
cron

Konstantin
02.12.2017
11:46:37
cron
Это будет работать с sidekiq или надо бэкэнд для задач менять?

Vitaliy
02.12.2017
11:47:01
Будет работать с сайдкиком

Konstantin
02.12.2017
11:47:11
Спс

Fedor
02.12.2017
11:48:29
есть гем whenewer которые реализует хрон в руби

Vitaliy
02.12.2017
11:48:34
Вообще для крона я rake-таски завожу. А внутри можно уже что угодно дергать, и воркеры, и сервис-обжекты, и просто модели, а код весь хранить в rake-таске

Fedor
02.12.2017
11:48:42
полняет любой руби код по расписанию, хоть с сайдкиком, хоть без

Vitaliy
02.12.2017
11:49:09
Плюсую за whenever, тоже использую

Fedor
02.12.2017
11:49:13
и есть просто линуксовый cron который вполняет консольные команды в linux, ты туда можешь засунуть rake do:task по расписанию и все

Vitaliy
02.12.2017
11:49:19


Konstantin
02.12.2017
11:54:32
Ща попробуем)

Mega
02.12.2017
15:49:58
Всем привет! Правильно ли. я понял что в 5 версии Rails нужно использовать в модели запись такого вида: class Tweet < ApplicationRecord end вместо class Tweet < ActiveRecord::Base end

Dmitry
02.12.2017
15:51:14
ну сделай rails g model trololo

Google
Dmitry
02.12.2017
15:51:21
и посмотри что он тебе сгенерирует)

у нас в приложении на 5 рельсах есть вот такая вот штука

class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end

это application_record.rb

все остальные модели class Order < ApplicationRecord

Mega
02.12.2017
16:17:36
Пишут что этот файл # app/models/application_record.rb будет автоматически добавлен к модели в Rails 5. Получается ничего писать не нужно class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end

Dmitry
02.12.2017
16:28:55
Ты очень странно выразился, когда ты делаешь rails new appname

Этот файл создаётся в папке с моделями

Остальные модели наследуются от ApplicationRecord

Но если их создавать генератором, то писать ничего действительно не нужно.

Di
02.12.2017
19:08:40
Ребят, подскажите. Есть мейлер, он отправляет письмо и при успешной отправке он должен записывать время последней отправки этому адресату. Вроде напрашивается коллбек в мейлере, но слышал от старшего товарища что это нехорошо, типа это не ответственность мейлера. Прав ли он? В гугле примеров что-то не найду, как лучше сделать.

Ro
02.12.2017
22:40:52
да, просто в Rails 5 они сделали ApplicationRecord, который наследуется от ActiveRecord::Base. Смысл был в том, чтобы ты мог бы добавлять что-то в свои модели, и чтобы это распространялось на все модели. Т.е. больше для удобства.

я себе добавил туда метод update_with_context, которого нет в рельсах

вот как выглядит:

class ApplicationRecord < ActiveRecord::Base self.abstract_class = true # Update attributes with validation context. # In Rails you can provide a context while you save, for example: `.save(:step1)`, but no way to # provide a context while you update. This method just adds the way to update with validation # context. # # @param [Hash] attributes to assign # @param [Symbol] validation context def update_with_context(attributes, context) with_transaction_returning_status do assign_attributes(attributes) save(context: context) end end end

Google
Александр
03.12.2017
07:28:56
keep it short and simple

Dmitry
03.12.2017
11:09:51
сделал rake таск который с сайта цб берет курс евро в wheneven сделал every 1.day, at: '5:30 am' do rake "rate:update_daily_rate" end

он мне сгенерировал

# Begin Whenever generated tasks for: /home/d/dmitryd8/lemans-france.ru/config/schedule.rb 30 5 * * * /bin/bash -l -c 'cd /home/d/dmitryd8/lemans-france.ru && RAILS_ENV=production bundle exec rake rate:update_daily_rate —silent » log/whenever.log 2>&1' # End Whenever generated tasks for: /home/d/dmitryd8/lemans-france.ru/config/schedule.rb

и это не работало потому что это в докере нужно еще версию руби выбирать

я сделал

30 5 * * * /bin/bash -l -c 'cd /home/d/dmitryd8/lemans-france.ru && chruby ruby-2.3 && RAILS_ENV=production bundle exec rake rate:update_daily_rate --silent >> log/whenever.log 2>&1'

т.е. тупо в crontab -e вставил после перехода в папку && chruby ruby-2.3

как то можно просто в schedule.rb это сделать

Vitaliy
03.12.2017
11:14:39
Можно по тикетам в whenever гитхабе поискать

docker и ruby version

Dmitry
03.12.2017
11:15:06
все к слову заработало когда ручками поправил

Dmitry
03.12.2017
11:15:29
вот думаю гем только когда запускаешь whenever —update-crontab

апдейтит cron

если он сам мне его не обновит как нибудь то проблемы в общем то и нет.

Vitaliy
03.12.2017
11:16:58
Из капистраны тогда убрать его нужно

т.к. он при деплое вроде это делает одним из шагов

Dmitry
03.12.2017
11:18:20
++

Andrey
03.12.2017
12:39:04
По идее надо докер править. Чтобы версию не выбирать.

Ставить руби не через rbenv rvm и тд

Google
Dmitry
03.12.2017
13:02:31
у меня только внутри докера доступ, так что не могу я этого сделать

George
03.12.2017
15:40:28
Что-то туплю, подскажите, есть две модели Юзер и Мероприятие. Между ними связь многие ко многим. А как бы мне определять юзера, который создал мероприятие?

Fedor
03.12.2017
15:43:20
иначе никак

потому что какой-нибудь users.first не подойдет

там будет сортировка по id

Igor
03.12.2017
15:45:23
https://pastebin.com/TBscZ7aC

https://pastebin.com/uSUygDZy

взял декодер в который отлично работал в консоли винды 7

Admin
ERROR: S client not available

Igor
03.12.2017
15:46:24
теперь пытаюсь с ним работать в руби майн

и он выдает следующую ошибку

может кто подскажет как в декодере учесть кодировку сз866

все файлы в utf-8

George
03.12.2017
16:13:22
Ilya
03.12.2017
16:15:40
ахахахах, сижу читаю этот чат, и постоянно дежавю какое-то, кажется что раньше видел. А потом смотрю, сообщения за май. Как я туда попал — хз, но минут 15 потратил в попытках дойти до непрочитанных сообщений ?

Di
03.12.2017
17:34:15
если это User, то можно сделать например user.update(sent_at: DateTime.now) - проблем не вижу
Ну я примерно так и планировал, а по поводу квалификации товарища крепко задумался. Спасиб.

Ro
03.12.2017
17:35:33
ну на товарища обижаться не стоит, он наверное начитался умной литературы, но реального опыта не особо хватило чтобы подкрепить теорию)

Google
Fedor
03.12.2017
17:37:36
так же есть аллергия на AR, когда сложно следить за связями между моделями, и все связи удаляются и заменяются на скоупы )

это уже ближе к клинике

а вообще, что бы не было колбэков пишется класс - service_object, который занимается отправкой. И вместо вызова метода send_mail создается инстанс этого класса и вызывается perform

а внутри него уже все эти действия реализованы

тогда все лежит и управляется в одном месте

Di
03.12.2017
17:39:18
Есть люди у которых аллергия на колюэки
Ну я не предлагал прям вот в колбеках, можно же просто в коде. Вопрос в том что я сначала сделал аптейдт атрибута последней отправке в самой джобе, мне сказали что плохо, я предложил в мейлере апдейтить атрибут, тоже нехорошо. Вот я и завис вообще. Мне же надо еще предусмотреть вдруг в мейлере ошибка возникла, значит атрибут не менять, письмо ж не отправилось.

Fedor
03.12.2017
17:40:24
SendMailService.new(from: user1, to: user2, subject: subject, text: text).perform

или perform_delayed

и все, что надо сделать в тразакциях, ифах и прочем внутри этого класса

ну и SendMailService - это не магия какая-то из глубин рельсы, а класс, который надо самому написать )

Alex
03.12.2017
17:43:18
ИМХО, в моделях где не более 100 строк это все глубоко не обязательно )

Di
03.12.2017
17:46:49
ну и SendMailService - это не магия какая-то из глубин рельсы, а класс, который надо самому написать )
Так а чем плохо вызывать мейлер через deliver_later, и там внутри мейлера при отправке делать model.update(last_send: Time.now), по сути то же самое? Ведь мейлер на сервис обжект похож сильно.

Fedor
03.12.2017
17:47:07
потому что это не задача мэйлера )

чисто архитектурна яфишка

потому что потом у тебя отвалится SMTP сервер, ты будешь это дебажить и испоганишь базу, потому что окажется что при отправке мэйле в колбэках обновляются пользователи, создаются заказы, проводятся оплаты и.т.д.

и если ты сам это не наговнокодил, то ты этого не знаешь )

а узнаешь когда оно уже свершилось и уже все плохо

Di
03.12.2017
17:55:57
О, мудрый комент, спасибо, как то в голову не пришло. Спасиб!

O
03.12.2017
18:09:56
А норма ли такое ?

Смотрю на строку аж страшно становится

Fedor
03.12.2017
18:10:30
нет, так никто не делает

Страница 469 из 921