Zainstalowałem postgresql-9.2.4
ze źródła, teraz w aplikacji railsowej, kiedy wykonuję:
rake db:create
polecenie, które otrzymuję:
$ 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"}
dowolny pomysł?
źródło
sudo -u postgres psql postgres
dla Debiana lub podobnego systemu operacyjnego.Upewnij się, że w
database.yml
pliku znajduje się poprawna konfiguracja . Powinieneś użyćtemplate0
, jak sugeruje błąd:test: adapter: postgresql encoding: unicode database: your_db_name template: template0 host: localhost ...
źródło
template0
w swoim configu, jeśli to umieszczę to otrzymuję:PG::Error: ERROR: permission denied to copy database "template0" : CREATE DATABASE "my_database_test" ENCODING = 'unicode' TEMPLATE = "template0"
development
?Jeśli używasz Debiana, po zainstalowaniu pakietu postgresql użyje on domyślnych ustawień regionalnych do utworzenia bazy danych template1. Jeśli nie skonfigurowałeś swojego systemu operacyjnego do używania UTF-8 jako domyślnych ustawień regionalnych, napotkasz ten błąd.
Oprócz powyższych rozwiązań, jeśli korzystasz z nowej instalacji i nie masz aktywnych baz danych, możesz usunąć pakiet postgresql i ustawić domyślne ustawienia regionalne na UTF-8. Zaletą tej metody jest możliwość pominięcia informacji o lokalizacji podczas tworzenia baz danych w przyszłości.
dpkg-reconfigure locales
Jeśli nie widzisz żądanych ustawień regionalnych, zainstaluj pakiet locales-all
apt-get install locales-all
Następnie usuń postgresql
apt-get remove --purge postgresql-<version>
Następnie przeinstaluj lub jeszcze lepiej zaktualizuj do najnowszej wersji, która nie jest w stabilnej wersji Debiana .
źródło
Jak dla mnie to po prostu zmieniam linię z
database.yml
:encoding: unicode
do:
encoding: SQL_ASCII
tylko to i wszystko działa.
źródło
Jeśli Twoja instalacja Postgres jest nowa i nie
data
zapełniłeś jeszcze żadnych baz danych, możesz usunąć katalog i ponownie uruchomić polecenie initdb z flagą, aby utworzyć bazy danych przy użyciu UTF-8.Zmodyfikuj to polecenie, aby pasowało do twojej instalacji postgres.
-E
Flaga mówi co kodowanie znaków powinno być domyślny. Tutaj wymieniono inne kodowania znaków ./usr/local/pgsql/bin/initdb -E UTF8 -D /usr/local/pgsql/data -U postgres
Powinien pojawić się błąd i powiedzieć, że
data
katalog nie jest pusty. Postępuj zgodnie z instrukcjami i usuń katalog, a następnie ponownie uruchom polecenie. (Lub usuńdata
katalog przed rozpoczęciem, ale zawsze dobrze jest zobaczyć instrukcje dla siebie).źródło
Miałem podobny problem. Moja baza danych.yml wyglądała tak: -
default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: chatapp_development test: <<: *default database: chatapp_test production: <<: *default database: chatapp_production username: chatapp password: <%= ENV['CHATAPP_DATABASE_PASSWORD'] %>
Dodałem template: template0 do ustawień domyślnych
default: &default adapter: postgresql template: template0 encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
I zadziałało
źródło
template: template0
MUSI przyjść, zanimencoding: unicode
się wydaje.