【问题标题】:Heroku Postgres bytea in EbeanEbean 中的 Heroku Postgres bytea
【发布时间】:2015-04-30 05:25:48
【问题描述】:

我正在使用 play 2.2 和部署到 Heroku 的 Ebean ORM。 Ebean 新手,我遇到了麻烦。我需要存储一个图像文件并且遇到了兼容性问题。 Ebean 将允许使用@Lob 创建一个Blob,或者不带标签的longvarbinary。我需要一个用于 Postgres 的 bytea。是否有可能做到这一点?如果没有,还有其他存储图像文件的方法吗?

编辑:

这是我在尝试将运行良好的本地存储库推送到 Heroku 时收到的错误消息。

2015-04-30T15:43:02.546699+00:00 app[web.1]: Play server process ID is 3
2015-04-30T15:43:04.524027+00:00 app[web.1]: [info] play - database   [default] connected at jdbc:postgresql://ec2-184-73-221-47.compute- 1.amazonaws.com:5432/dcn8fp0jefq7ef
2015-04-30T15:43:05.490712+00:00 app[web.1]: [error] play - ERROR: type "blob" does not exist
2015-04-30T15:43:05.490720+00:00 app[web.1]:   Position: 376 [ERROR:0, SQLSTATE:42704]
2015-04-30T15:43:05.531616+00:00 app[web.1]: Oops, cannot start the server.
2015-04-30T15:43:05.532587+00:00 app[web.1]:    at play.api.db.evolutions.Evolutions$.checkEvolutionsState(Evolutions.scala:193)
2015-04-30T15:43:05.543409+00:00 app[web.1]:    at play.api.db.evolutions.EvolutionsPlugin.onStart(Evolutions.scala:459)
2015-04-30T15:43:05.543526+00:00 app[web.1]:    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
2015-04-30T15:43:05.543570+00:00 app[web.1]:    at scala.collection.immutable.List.foreach(List.scala:318)
2015-04-30T15:43:05.543479+00:00 app[web.1]:    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
2015-04-30T15:43:05.543095+00:00 app[web.1]:    at play.api.db.evolutions.Evolutions$.applyScript(Evolutions.scala:277)
2015-04-30T15:43:05.5

这是在我的模型中定义的:

@Lob
public byte[] profilePicture;

这是我的 application.conf 设置:

# Database configuration
# ~~~~~
# You can declare as many datasources as you want.
# By convention, the default datasource is named `default`
#

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play;MODE=PostgreSQL"
#
# You can expose this datasource via JNDI if needed (Useful for JPA)
# db.default.jndiName=DefaultDS

# Evolutions
# ~~~~~
# You can disable evolutions if needed
# evolutionplugin=disabled

# Ebean configuration
# ~~~~~
# You can declare as many Ebean servers as you want.
# By convention, the default server is named `default`
#
ebean.default="models.*"

我也有一个类似这样的 Procfile。

web: target/universal/stage/bin/hello-play-backbone -Dhttp.port=${PORT} $PLAY_OPTS 
-DapplyEvolutions.default=true -Ddb.default.url=${DATABASE_URL} -Ddb.default.driver=org.postgresql.Driver

【问题讨论】:

  • 这与这个问题有关吗? stackoverflow.com/questions/11569838/…
  • 我就是这样做的。它在本地运行良好,但是当推送到 heroku 时,我收到了我刚刚添加到原始问题中的错误消息。
  • 您是否将db.default.url=${?DATABASE_URL} 设置在application.conf 中的任何位置?另外,我不确定 H2 驱动程序,我通常这样设置 db conf:github.com/mkbehbehani/play-heroku-seed/blob/master/conf/…
  • 另一件要考虑的事情:如果模式(您的 *.sql 文件)是为 H2 生成的,即使模式设置为 PostgreSQL,它们也可能不正确。这个答案有一些很好的信息:stackoverflow.com/a/12196800/63308
  • 如果我取出字节[],它们就可以工作。我认为您认为这是一个 H2 问题是正确的。看起来 H2 不支持 bytea。可能是什么问题。我将尝试遵循链接中的建议。谢谢

标签: postgresql heroku playframework playframework-2.0 ebean


【解决方案1】:
http://stackoverflow.com/a/12196800/63308

使用上面 cmets 中@codefinger 提供的上述链接,我能够得到这个工作。只是想更新以防其他人为此苦苦挣扎。原来 H2 不支持 bytea。在更改下面发布的默认数据库配置后,我能够生成有效的 DDL 并远程连接到我的 Heroku 数据库,从而消除了对 H2 的需求。

db.default.driver=org.postgresql.Driver 
https://postgres.heroku.com/ -> YourDBs -> db-name -> Connection settings -> JDBC URL + &ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多