2016-11-23 1 views
1

Ich entwickle einen RESTful Web Service. Ich entwickelte sowohl den Server als auch den Client in JAVA mit JPA und einer SQLite-Datenbank, und lokal funktioniert es perfekt. Ich führe einfach die Application-Klasse des Clients aus und sendet die Anfragen an localhost und erhält die Antworten auf perfekte Weise.JAVA RESTful Server auf Heroku: Erlaube das Hochladen/Lesen der SQLite Datenbank

Wenn ich jedoch den Server auf Heroku bereitstellen, Erstellen der .war benötigt (beide mit Ant oder Exportieren der .war aus Eclipse), erhalte ich erfolgreich das Stammelement bei myapp.example/rest/Gebäude, so bedeutet es dass es keine Probleme mit der .war selbst:

<buildings/> 

Allerdings, wenn ich versuche, eine einfache POST-Anforderung zu tun, ein neues Gebäude (das lokal funktioniert) ich Erfragen Sie die folgenden 500 Fehler hinzuzufügen:

**HTTP Status 500 - Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException** 

Ich denke, das Problem ist, dass es kann nicht wissen, wo die SQLite-Datenbank zu finden, so ist die Frage:

Wie kann ich die SQLite-Datenbank zu Heroku laden, um meinen Server zu ermöglichen, die Daten von ihm zu lesen und dann Antworten zurück zu meinem lokaler Kunde? Es muss in irgendeiner Weise für das .war-Paket enthalten sein? (Ich habe gelesen, dass Heroku nicht die Unterstützung für dieses RDBMS hat, aber ich habe gehört, dass es Umgehungslösungen gibt, da die SQLite-Datenbank einfach eine Datei ist, wie viele andere).

Vielen Dank im Voraus, und zögern Sie nicht mich andere Schnipsel oder etwas anderes zu fragen, wenn die Frage nicht klar ist!

Antwort

2

Sie möchten SQLite nicht auf Heroku verwenden, da Heroku ephemeral filesystem verwendet. Das bedeutet, dass die Änderungen an Ihrer SQLite-Datenbank alle 24 Stunden verloren gehen. Das ephemere Dateisystem ist wichtig, weil es Konsistenz auf dem Server gewährleistet (d. H. Schneeflockenserver verhindert). SQLite verhindert auch, dass Ihre App hochskaliert (d. H. Mehr Instanzen Ihrer App ausführt), da sie jeweils eine andere Datenbank haben.

Heroku bietet kostenlose PostgreSQL-Instanzen, die ich Ihnen empfehlen zu verwenden. Sie müssen Ihren JDBC-Treiber und configure your app use JDBC_DATABASE_URL ändern, aber wahrscheinlich nicht viel mehr.

Nebenbemerkung: Bevor Sie den Post bearbeitet haben, sieht es so aus, als hätten Sie einen java.lang.NoSuchMethodError Fehler erwähnt. Dies ist wahrscheinlich auf das Laden nichtdeterministischer Klassenpfade zurückzuführen.

+0

Vielen Dank für Ihre Antwort! Ich habe meine Datenbank korrekt eingerichtet, indem ich die Anleitung zum Heroku run echo \ $ JDBC_DATABASE_URL befolge. Wenn ich jedoch versuche, Abfragen mit z. heroku pg: psql DATABASE_URL, die Antwort ist ---> Verbinden mit DATABASE_URL und es dauert sehr lange (es wird nie beendet). Wie kann ich meine Tabellen erstellen (oder wie kann ich meine SQLite-Datenbank darin importieren? Vielen Dank! – user3319400

+0

Haben Sie 'heroku pg: psql' ohne Argumente versucht? – codefinger

+0

Ja, und es hat nicht funktioniert (anfänglich) Aber ich habe das Problem behoben, indem ich den ganzen Vorgang wiederholt habe. Vielen Dank! – user3319400

Verwandte Themen