Надграждане на Play до 2.4, Slick до 3.1.1, стойността withTransaction не е член на play.api.db.slick.Database

Опитвам се да надстроя приложението си от използване на Play 2.3.x до Play 2.4.x (ще завърши на 2.6, но ще върви стъпка по стъпка) и Slick от 2.1.0 на 3.1.1.

Направих всичко възможно да следвам ръководството за мигриране на Play, Ръководство за мигриране на Play Slick и Хилави ръководства за надстройка.

Един от проблемите, които имам в момента, е със следния ред:

val db: slick.Database = play.api.db.slick.DB

Изглежда, че това вече не е правилният начин за това b/c Получавам грешки като:

value withTransaction is not a member of play.api.db.slick.Database

От ръководството за мигриране на Play slick изглежда, че трябва да променя това на нещо подобно

val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)

Но не знам, ако просто нямам правилното импортиране или нещо подобно, но получавам грешки като:

object driver is not a member of package play.api.db.slick
not found: value DatabaseConfigProvider

За повече контекст, ето един от файловете, с които работя, който дава тази грешка: https://github.com/ProjectSidewalk/SidewalkWebpage/blob/2c48dfa2e34c691e40568bfa9d50493aa3fe9971/app/models/attribute/GlobalAttributeTable.scala

Някой знае ли какво съм пропуснал сред тези ръководства за миграция?

Благодаря ви предварително!


person Mikey    schedule 22.10.2018    source източник
comment
Мигрирате от гладък 2.1.0 към 3.1.1. Те напълно променят управлението на транзакциите. Можете да прочетете за това тук slick.lightbend. com/doc/3.1.1/. Мисля, че първо трябва да проверите ръководството за мигриране към версия 3.0.0 - slick.lightbend. com/doc/3.0.0/upgrade.html   -  person Valerii Rusakov    schedule 23.10.2018
comment
Благодаря! Да, аз също се опитах да следвам ръководството от 2.1.0 до 3.0.0. Но разделът, към който сте се свързали относно I/O действията на DB, ми минава напълно през главата. Гледам кода си като def getAllX: List[X] = db.withSession { implicit session => tableOfX.list } и не мога да видя от ръководствата за надграждане как трябва да се мигрира код като този. След като стигнете до документите 3.0.0, withSession никога повече не се споменава. Най-доброто, което успях да намеря, е тук, но и това не обяснява напълно.   -  person Mikey    schedule 23.10.2018
comment
Добре, ето още една публикация в блог, която намирам за полезна, която дава повече информация за миграцията на този конкретен синтаксис: anadea.info/blog/comparative-analysis-of-slick-2-and-slick-3 Ще докладвам, след като го изпробвам.   -  person Mikey    schedule 23.10.2018


Отговори (1)


Оказа се, че съм пропуснал няколко неща:

  1. Не бях разбрал, че трябва да използвам по-нова версия на библиотеката play-slick (все още използвах 0.8.0 вместо 1.1.1).
  2. Трябваше да добавя импортирането import play.api.Play вместо импортирането import play.api.Play.current, което вече имах.
  3. Имах импортиране import play.api.db.slick, което причиняваше грешката „драйверът на обекта не е член на пакет play.api.db.slick“ на реда с това импортиране: import slick.driver.JdbcProfile. Току-що премахнах предишния импорт, който не беше необходим.
  4. Както каза @Valerii, withTransaction е премахнат в Slick 3.1 и замяната е документирана в различните връзки в коментарите по-горе.
person Mikey    schedule 26.10.2018