ich habe installiert postgresql-9.2.4
von der Quelle , jetzt in der Rails-App, wenn ich Folgendes ausführe:
rake db:create
Befehl, den ich bekomme:
$ bin/rake db:create RAILS_ENV="test"
PG::Error: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
HINT: Use the same encoding as in the template database, or use template0 as template.
: CREATE DATABASE "verticals_test" ENCODING = 'unicode'
/home/vagrant/my-project/.gems/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:652:in `exec
....
bin/rake:16:in `load'
bin/rake:16:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"my_db", "host"=>"localhost", "pool"=>5, "username"=>"my_user", "password"=>"my_password"}
irgendeine Idee?
quelle
sudo -u postgres psql postgres
für debian oder ein ähnliches Betriebssystem.Stellen Sie sicher, dass Ihre
database.yml
Datei das richtige Setup enthält. Sie sollten verwendentemplate0
, wie der Fehler andeutet:quelle
template0
in meiner Konfiguration, wenn ich es platziere, bekomme ich:PG::Error: ERROR: permission denied to copy database "template0" : CREATE DATABASE "my_database_test" ENCODING = 'unicode' TEMPLATE = "template0"
development
Umgebung genauso ?Wenn Sie Debian verwenden und das Postgresql-Paket installieren, wird Ihr Standardgebietsschema zum Erstellen der Datenbank template1 verwendet. Wenn Sie Ihr Betriebssystem nicht für die Verwendung von UTF-8 als Standardgebietsschema konfiguriert haben, tritt dieser Fehler auf.
Zusätzlich zu den oben genannten Lösungen können Sie, wenn Sie sich in einer Neuinstallation befinden und keine aktiven Datenbanken haben, das postgresql-Paket entfernen und Ihr Standardgebietsschema auf UTF-8 festlegen. Der Vorteil dieser Methode besteht darin, dass Sie beim Erstellen von Datenbanken in Zukunft Gebietsschemainformationen weglassen können.
dpkg-reconfigure locales
Wenn Sie das gewünschte Gebietsschema nicht sehen, installieren Sie das Paket locales-all
apt-get install locales-all
Dann entfernen Sie postgresql
apt-get remove --purge postgresql-<version>
Dann neu installieren oder besser noch auf eine aktuelle Version aktualisieren, die nicht in Debian stabil ist .
quelle
Ich ändere einfach die Zeile von
database.yml
:encoding: unicode
zu:
encoding: SQL_ASCII
genau das und alles funktioniert.
quelle
Wenn Ihre Postgres-Installation neu ist und Sie noch keine Datenbanken ausgefüllt haben, können Sie Ihr
data
Verzeichnis entfernen und den Befehl initdb mit dem Flag erneut ausführen, um Datenbanken mit UTF-8 zu erstellen.Ändern Sie diesen Befehl entsprechend Ihrer Postgres-Installation. Das
-E
Flag gibt an, welche Zeichencodierung die Standardeinstellung sein soll. Andere Zeichenkodierungen sind hier aufgelistet .Es sollte ein Fehler auftreten und Ihnen mitteilen, dass das
data
Verzeichnis nicht leer ist. Befolgen Sie die Anweisungen, entfernen Sie das Verzeichnis und führen Sie den Befehl erneut aus. (Oder entfernen Sie dasdata
Verzeichnis, bevor Sie beginnen, aber es ist immer schön, die Anweisungen selbst zu sehen.)quelle
Ich hatte ein ähnliches Problem. Meine database.yml war wie folgt: -
Ich habe template: template0 zu den Standardeinstellungen hinzugefügt
Und es hat funktioniert
quelle
template: template0
MUSS kommen, bevorencoding: unicode
es scheint.