2016-04-17 5 views
2

Написание чистого приложения Java-сервера для Heroku с использованием Maven. Подключение к базе данных Postgres Heroku.
Все работает при запуске локально, используя конфигурацию IntelliJ для запуска приложений Java, указав URL-адрес Heroku DB в качестве переменной среды. Приложение работает, и я могу подключиться к БД.
Примечание: Я обнаружил, что IntelliJ как-то автоматически использует свой собственный драйвер Postgres, тот, который я указал в pom.xml игнорируется, очевидно
Однако, когда я развернуть приложение, я получаю следующую ошибку в мой Heroku войти, как только я подключаюсь к БД:
java.lang.ClassNotFoundException: org.postgresql.DriverHeroku не может найти Postgres Драйвер JDBC

Я последовал за учебник 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 окр ПОСРЕДНИКОВ, и даже построения URL БД «вручную», с sslmode=require и т.д., но все же не повезло.
Моего pom.xml имеет modelVersion, идентификатор_группы, артефакт, версия и имя указаны, а также:

<dependencies> 
    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.4.1208</version> 
    </dependency> 
</dependencies> 

Моих PROCFILE, что Heroku использует для запуска приложения, выглядят следующим образом:

web: java $JAVA_OPTS -cp target/classes:"target/dependency/*" Main --port $PORT 

Когда я развертываю приложение, я не получаю ошибок, сборка выполнена успешно.

Что может быть причиной отказа водителя? Я что-то забываю в pom.xml или Procfile или что-то еще?

+0

Чтобы уточнить, когда вы добавляете вызов 'Class.forName', работает ли соединение DB? – codefinger

+0

локально, 'forName()' ловит драйвер jdbc IntelliJ и работает соединение. В Heroku 'forName()' запускает 'ClassNotFoundException' – kit

+0

. Можете ли вы проверить, находится ли файл jQuery postgres в вашем блоке Heroku, запуская' heroku run ls target/dependency/'? – codefinger

ответ

0

Иногда удобство (например, использование интеграции Git IntelliJ для нажатия на Heroku, как и я) приводит к нежелательным проблемам.

Я использовал git push для обновления своего приложения на Heroku. Все было хорошо, за исключением того, что необходимые библиотеки не вставали на свои места.
Пробовал mvn heroku:deploy, протестирован, все работает! Спасибо codefinger за предложение.

Если кто-нибудь спросит, вот как вы это делаете, если никогда не делали раньше:
1) Добавьте это в pom.xml:

<build> 
     <plugins> 
      <plugin> 
       <groupId>com.heroku.sdk</groupId> 
       <artifactId>heroku-maven-plugin</artifactId> 
       <version>1.0.0</version> 
      </plugin> 
     </plugins> 
    </build> 

2) Выполнение Maven цели heroku:deploy.
Вот и все.

Смежные вопросы