
folex
17.07.2016
21:20:46
вообще важно только оно, фактическая степень идеальности не важна

Anatoliy
17.07.2016
21:20:57
конечно хорошо :) опыт растет тоже неплохо) правда иногда в тупики упираешься(

Wystan
17.07.2016
21:21:13
ну смотря какой продакешен, если это какой-то мелкий магазин

Anatoliy
17.07.2016
21:21:26
Просто на работает так не поделаешь) Для своих проектов так тоже делать плохо, но тут ситуация что "хоть что-то"

Google

folex
17.07.2016
21:21:31
anatoliy, попробуй все аргументы jvm вывести, и посмотри, есть ли среди них configurationFile

Anatoliy
17.07.2016
21:21:42
нет) Это учет выставленных товаров внутри игры :)

folex
17.07.2016
21:21:43
вообще всё выглядит так, будто сам logback не загрузился
он при старте точно должен что-то писать хоть куда-то
нашел ли реализацию, какой конфиг подцепил, какие аппендеры из конфига взял
нужно чтобы были logback и log4j/slf4j
и может еще что-нибудь, вечно забываю, но вроде этого должно быть достаточно
ну и логгеры проверь что логбэковские или из slf4j используешь
а не твиттеровский какой-нибудь

Anatoliy
17.07.2016
21:23:54
libraryDependencies ++= Seq(
"org.json4s" %% "json4s-native" % "3.3.0",
("org.slf4j" % "slf4j-nop" % "1.6.4").exclude("ch.qos.logback","logback-classic"),
"org.mariadb.jdbc" % "mariadb-java-client" % "1.3.6",
"com.typesafe.slick" %% "slick" % "3.1.1",
"com.typesafe.akka" %% "akka-actor" % "2.4.6",
"com.typesafe" % "config" % "1.3.0",
"com.typesafe.akka" %% "akka-slf4j" % "2.4.6"
)

folex
17.07.2016
21:24:09
а заче там slf4j-nop?

Anatoliy
17.07.2016
21:24:15
Вычитал в доках
Или в каком то примере

Google

folex
17.07.2016
21:24:24
и зачем logback-classic вынут?
nop не нужен
а вот logback-classic нужен

Anatoliy
17.07.2016
21:24:37
а как нужно?

folex
17.07.2016
21:24:50
logback-classic и akka-slf4j
должно хватить

Anatoliy
17.07.2016
21:25:10
libraryDependencies ++= Seq(
"org.json4s" %% "json4s-native" % "3.3.0",
"org.slf4j" % "slf4j-classic" % "1.6.4",
"org.mariadb.jdbc" % "mariadb-java-client" % "1.3.6",
"com.typesafe.slick" %% "slick" % "3.1.1",
"com.typesafe.akka" %% "akka-actor" % "2.4.6",
"com.typesafe" % "config" % "1.3.0",
"com.typesafe.akka" %% "akka-slf4j" % "2.4.6"
)
?

folex
17.07.2016
21:26:53
logback-classic
"ch.qos.logback" % "logback-classic" % "1.1.3"
версия может быть другой
наверняка есть новее уже
Ну и такие большие логи в чаты обычно не принято кидать

Anatoliy
17.07.2016
21:28:46
щас попробую
прошу прощения

folex
17.07.2016
21:29:09
lpaste.net или просто текст ошибки

Anatoliy
17.07.2016
21:30:10
Хм... заработало!!! :) Лог начал подцепляться :)

folex
17.07.2016
21:30:15
yay :)
думаю, теперь оно и без аргумента будет работать

Anatoliy
17.07.2016
21:30:29
Теперь осталось подключение к БД сделать и я буду вообще счастлив :)

folex
17.07.2016
21:30:37
из ресурсов он по умолчанию тянет

Google

Anatoliy
17.07.2016
21:30:39
подключение к БД через файл конфигурации :)

folex
17.07.2016
21:30:56
но это такое... не лучший вариант. Если для тестов и продакшна нужные разные конфиги например.
но это уже кому как

Anatoliy
17.07.2016
21:31:21
ну это тоже понятно, но для тестов можно просто аргумент как раз использовать по идее)

folex
17.07.2016
21:31:34
ну в общем я считаю что чем явнее тем лучше
но это вкусовщина

Anatoliy
17.07.2016
21:31:56
Хотя... косяк все же там есть... странно как-то...
заработал дебаг слика который там был включен, а сам способо отображения данных не изменился
Видимо ActorLogging как-то по другому всё выводит...

folex
17.07.2016
21:32:27
оно в stdout льется?
не, akka-slf4j всё в логбэк уводит

Anatoliy
17.07.2016
21:32:59
а как можно проверить? там голый ActorLogging без всяких изменений

Anatoliy
17.07.2016
21:33:05
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!— encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default —>
<encoder>
<pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
<logger name="slick.jdbc" level="info"/>
</configuration>
Вот так выглядящий

folex
17.07.2016
21:33:43
перенаправьте вывод логбэка в файл
в общем поиграйтесь с logback.xml, полезно уметь

Anatoliy
17.07.2016
21:34:20
Эм... щас найду как - направлю, а зачем? мне в файл надо только warn и выше. Может даже только error и выше

folex
17.07.2016
21:34:38
чтобы понять, идет ли лог от акторов в логбэк
если все направите в файл, а акторы будут в стдаут идти, значит понятно где проблема
если в файл будут, значит в конфиге неправильно что-то

Google

Anatoliy
17.07.2016
21:35:09
Щас найду как и проверю

folex
17.07.2016
21:35:19
у логбэка хорошая дока
успехов

Alex
17.07.2016
21:36:23
простите шо отвлекаю
на curry on кто нибудь завтра будет?

Anatoliy
17.07.2016
21:37:50
<timestamp key="byDay" datePattern="yyyyMMdd"/>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>log-${byDay}.txt</file>
<encoder>
<pattern>%logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE" />
</root>
Вот так отправляю в файл. Файл - создался. Но пишет в консоль
Народ, всем спасибо большое за помощь :) С логами и конфигом уже видимо завтра заканчивать буду)
Эх... либо я где-то накосячил еще, либо удаление все же не отрабатывает перед инсертами...(

Aleksey
18.07.2016
04:55:43
Кстати, зачем нужен dbActor? Почему нельзя просто примешивать трейт?

Admin
ERROR: S client not available

Anatoliy
18.07.2016
04:56:10
Он не нужен, просто когда делал - посчитал что с ним будет лучше
Но... зачем примешивать трейт то?

Aleksey
18.07.2016
04:56:54
Ну или инстанцировать рядышком.
Не суть.

Anatoliy
18.07.2016
04:57:46
да не, трейт там вообще зачем?
обращение к БД идет через объект PoeНужнаяТаблица

Aleksey
18.07.2016
04:59:51
Ну можно сделать
trait SomeRepository {
def doSomethingInDb(id: String): Future[Something] = {
// ...
}
}
class MyActor extends Actor with SomeRepository

Anatoliy
18.07.2016
05:00:18
И что мне это даст?
Я просто действительно не понимаю...

Daniel
18.07.2016
05:04:44
можно конечно всё нафигачить в одном классе, но за чем такое полотно на тысячи строк?
значит надо вынести что-то отдельно, логично при этом следовать логике, в одном месте код для работы с базой, в другом веб-апи и тд
вопрос, как теперь это связать воедино? тут вариантов много и дело вкусовщины

Google

Anatoliy
18.07.2016
05:05:16
ну так оно так и вынесено

Aleksey
18.07.2016
05:05:47
Актор не самое хорошее решение для вынесения работы с БД по JDBC.

Anatoliy
18.07.2016
05:05:49
есть модельки для работы с базой, преставляют собой что то такое:
object PoeAccounts extends ModelDef[PoeAccount, PoeAccountTableDef] {
val table = TableQuery[PoeAccountTableDef]
def addOrUpdate(row: PoeAccount): Unit = {
а актор уже дергал их просто

Daniel
18.07.2016
05:07:46
актор работает последовательно, что нужно очень редко в клиентском (по отношению к базе) приложении
не говоря уже о том что обращаться к нетипизированным акторам вообще сомнительное удовольствие

Anatoliy
18.07.2016
05:09:01
Эм... а как оно должно работать тогда?

Daniel
18.07.2016
05:10:32
Алексей предложил вариант с трейтом, где описана логика работы с базой.
Можно еще не трейт подмешивать, а создавать объект сервиса БД и дергать методы этого объекта

Anatoliy
18.07.2016
05:10:39
У меня есть актор который дергает сам себя и раз в секунду проверяет изменения. При этом если есть данные - отправляет эти данные на парсинг другому актору, тот это дело уже всё парсит и разбирает. Если находит то что меня интересует - вносит в базу. Сейчас он это вносит через третий актор, но его вполне возможно убрать
Так я методы объекта и дергаю получается
Меня больше волнует что выполняя с десяток инсертов, я вижу всего 2-5 записей в таблице вместо этого десятка
И я не понимаю почему

Daniel
18.07.2016
05:12:58
разница в том, что когда сервисом бд является актор, то это как труба, а когда обычный объект, то кинул пригорошню запросов и они разом выполнились
ну это просто логично, хотя и не критично, если нет проблем с производительностью.
потеряны вызовы - логирование

Anatoliy
18.07.2016
05:13:39
логи есть, щас
http://pastebin.com/zfcuuJAi
Но - это актор, а я так понимаю нужен лог со слика?

Daniel
18.07.2016
05:26:18
Я логику приложения не знаю, поэтому разбираться в этом не буду. Первое подозрение, что где то эксепшн сжирается тихо.
Нужно смотреть, что пришло, а что нет на каждом этапе. Логируй вызовы методов. Сомневаюсь, что дело в базе и слике (хотя всякое бывает).

Anatoliy
18.07.2016
05:27:38
Эх... видимо я дурак и это не лечится... Хотя всё же вывод получается странным. У меня там идет indert or update, и в некоторых случаях он выполняет update, учитывая что оно всё очистилось - логично что строки нет. Но тут тогда в другом вопрос - почему он делает update если я перед всеми подобными запросами сищу стеш и жду ответа о том что он закончил всё это дело чистить?
Да, оно заработало, правда непонятно как отрабатывал select что возвращался результат если я перед этим удалял нужные значения из БД... но это ладно, это уже чуть позже буду разбираться)
И опять же всем спасибо за помощь и отзывчивость :)

Michael
18.07.2016
06:17:36
Раз тут такая жара пошла.
А кто что для работы с sql (PostgreSQL) базой юзает
Интересует от драйвера до orm?
А то я слик ковырял ковырял, не нравится он мне особо =(

Vladimir
18.07.2016
07:15:02
Скалайк посмотри