суббота, 13 сентября 2014 г.

vagrant, ruby on rails, и решение ошибки с кодировкой latin1

В один из вечеров, для саморазвития, следуя заветам Джона Резига (пишите код каждый день), решил написать новый проект, но не на PHP, а на Ruby. Давненько присматривался, но все откладывал, а сейчас появилось чуток времени. Дай думаю, принесу пользу людям, да и себе.

Порыскав понял, что писать на Ruby под Windows, не стоит. Linux ставить на ноут, пока нет возможности, решил запустить на виртуалке, используя виртуальную машину VirtualBox.
Для "еще_незнающих", есть полезная утилита vagrant (vagrantup.com) - можно запускать virtualbox и сохранять образы. То есть, установил virtualbox, vagrant -> запустил vagrant , скачал box, (образ), настроил один раз. А затем клонировал, и уже с клоном "играешься" как хочешь. Если клон-образа сломался, не беда, запускаем базовый образ, клонируем и через несколько минут - у нас уже полностью настроенная система. Profit!

Тут хороший мануал, по которому у меня все заработало почти сразу. Совет скачивайте и устанавливайте последние версии virtualbox, vagrant. Различные версии между собой несовместимы.

А теперь, собственно об ошибке, которая долго гуглится, а на русском вообще не нашел. Внимайте же)

после шага:

bundlerake db:create db:migrate db:seed
Ошибка:

PG::Error: ERROR:  encoding "UTF8" does not match locale "en_US"
DETAIL:  The chosen LC_CTYPE setting requires encoding "LATIN1".
: CREATE DATABASE "stuff_test" ENCODING = 'unicode'

Решение (взято отсюда):


1
2
sudo su postgres
psql
1
2
3
4
5
update pg_database set datistemplate=false where datname='template1';
drop database Template1;
create database template1 with owner=postgres encoding='UTF-8'
  lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;
update pg_database set datistemplate=true where datname='template1';


Don't forget!:

Выйти из postresql
\q

завершить сеанс под sudo
exit


Поздравляю, теперь все работает.