Wie vorbereitete Anweisung in heroku mit Postgres-Datenbank zu deaktivieren

8

Ich habe ein Problem in meinem Rails-Projekt lokal (mit postgres config) behoben, während ich in database.yml diese Aussage hinzugefügt habe:

%Vor%

Der Fehler, den ich behoben habe, war mit diesem Problem verbunden:

%Vor%

Nun möchte ich es auf meiner Produktions-App, die auf Heroku gehostet wird, mit einer Postgres-Datenbank beheben. Ich weiß nicht, wie vorbereitete Anweisungen deaktiviert werden, da database.yml automatisch generiert wird. Ich habe versucht, anzufügen:

%Vor%

zu dem URI meiner Datenbank, aber es endet mit einer DATABSE_URL, die falsch ist und daher kann ich keine Verbindung zu meiner Datenbank herstellen.

Was ist der Prozess und die richtige Syntax, um prepared_statement zu deaktivieren?

    
Solene Maitre 02.04.2014, 13:55
quelle

6 Antworten

11

Ab dem 19. Februar 2014 überschreibt heroku database.yml nicht mehr, sodass Sie vorbereitete Anweisungen in deaktivieren können Ihr production und staging (oder default ) Block der database.yml Datei, wie von neueste Dokumente :

%Vor%     
markquezada 20.08.2015 23:25
quelle
5

Wir waren besorgt über Sprödigkeit und Aufrechterhaltung der Konsistenz zwischen Staging / Produktion (unter Verwendung von DATABASE_URL auf Heroku) und Entwicklung / Test (unter Verwendung von database.yml / database.example.yml).

Inspiriert von Rails-Tests haben wir dies in Config eingefügt /initialisers/disable_prepared_statements.rb:

%Vor%

remove_connection liefert einen Hash der Verbindungsparameter der Verbindung, die entfernt wird. Dies sollte jede Datenbank.yml oder DATABASE_URL weiter funktionieren lassen.

    
Benjamin Hutton 23.02.2015 20:26
quelle
3

Sie sollten einfach ?prepared_statements=false zur vorhandenen Datenbank-URL hinzufügen und Ihre Dynos neu starten können. Das hat für uns funktioniert.

%Vor%

Um zu überprüfen, ob es nach dem Neustart des Servers eingerichtet wurde, können Sie eine Konsole öffnen und ActiveRecord::Base.connection_config abfragen.

    
lobati 21.01.2015 00:09
quelle
1

Sie können in einem Initialisierer einen Konfigurationshash an ActiveRecord :: Base.establish_connection übergeben. Zum Beispiel:

%Vor%

Ссылка

    
GregB 30.07.2014 00:53
quelle
1

Vor kurzem scheint es, dass Heroku die Einstellung von DATABASE_URL mit heroku config:set DATABASE_URL=<blah>?prepared_statements=false deaktiviert hat, was uns einen Fehler zurückgibt "▸ Dateianhangswerte DATABASE_URL können nicht überschrieben werden."

Um dies zu beheben, haben wir den Initiator "disabled_prepared_statements.rb" in config / containing:

hinzugefügt

ActiveRecord::Base.configurations[Rails.env].merge!(prepared_statements: false)

    
shyrahnama 25.11.2015 21:49
quelle
-3

Das Ausschalten vorbereiteter Anweisungen verringert die Leistung, da postgresql jede Abfrage vor der Ausführung neu planen muss. Daher schlage ich nicht vor, sie für Produktionsserver abzuschalten - besonders da rails dafür bekannt ist, viele kleine Abfragen durchzuführen, wenn Sie nicht wirklich gut aufpassen über eifriges Laden alles. Ich schlage vor, indead herauszufinden, wie Sie nach jeder Bereitstellung Neustarts durchführen können, ohne die Verfügbarkeit Ihres Dienstes zu beeinträchtigen. Ich bin kein Schienenguru, aber ich weiß, dass es machbar ist (unsere Firma macht es genau so). Hier ist ein bisschen mehr Einblick, warum dies geschieht Ссылка

    
kristok 12.04.2014 10:46
quelle