使用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 goalpom.xml
就这样

10-08 08:35
查看更多