使用Maven为Heroku编写纯Java服务器应用程序。
连接到Heroku的Postgres数据库。
当在本地运行时,一切都可以工作,使用IntelliJ的配置来运行Java应用程序,将Heroku的DB URL指定为环境变量。应用程序可以工作,我可以连接到数据库。
注意:我发现IntelliJ以某种方式自动使用了它自己的Postgres驱动程序,显然,我在pom.xml中指定的驱动程序被忽略了
但是,当我部署应用程序时,一旦连接到数据库,我的Heroku日志中就会出现以下错误:java.lang.ClassNotFoundException: org.postgresql.Driver
我遵循了Heroku教程,但是当我看到没有连接时,我把
Class.forName("org.postgresql.Driver");
之前
String dbUrl = System.getenv("JDBC_DATABASE_URL");
return DriverManager.getConnection(dbUrl);
只是为了确保找到司机。如果删除
Class.forName()...
检查,则会出现no suitable driver found for
[my db url]错误。关于最后一个错误,我尝试了JDBC_DATABASE_URL和DATABASE_URL env vars,甚至用
sslmode=require
等工具“手工”构建了dburl,但仍然没有成功。我的pom.xml指定了modelVersion、groupId、artifactId、version和name,以及:
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1208</version>
</dependency>
</dependencies>
Heroku用来启动应用程序的Procfile如下所示:
web: java $JAVA_OPTS -cp target/classes:"target/dependency/*" Main --port $PORT
当我部署应用程序时,没有错误,生成成功。
司机不装货的原因是什么?我是不是忘记了pom.xml、Procfile或其他一些东西?
最佳答案
有时,便利性(比如像我一样使用IntelliJ的git集成来推动Heroku)会导致不必要的问题。
我用git push
在Heroku上更新我的应用程序。一切都很好,只是所需的库没有到位。
尝试过,测试过,一切正常!谢谢你的建议。
如果有人问你,如果你以前从来没有做过,你可以这样做:
1)将codefinger添加到您的mvn heroku:deploy
中:
<build>
<plugins>
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>2.0.6</version>
</plugin>
</plugins>
</build>
2)执行maven goal
pom.xml
。就这样