ошибка при установке gem pg версии 0.12.2 на Ubuntu 12.04

Я работаю на Ubuntu 12.04 и пытаюсь установить pg gem v '0.12.2' на Ruby 1.9.3p194/Rails 3.2.3. Я установил libpq-dev и build-essential, но все равно получаю ту же ошибку:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /var/lib/gems/1.9.1 directory.
fernando@ubuntu:/media/fernando/OS/Rails/oops_booking$ sudo gem install pg -v '0.12.2'
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.9.1 extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... yes
checking for PQconnectionUsedPassword()... yes
checking for PQisthreadsafe()... yes
checking for PQprepare()... yes
checking for PQexecParams()... yes
checking for PQescapeString()... yes
checking for PQescapeStringConn()... yes
checking for PQgetCancel()... yes
checking for lo_create()... yes
checking for pg_encoding_to_char()... yes
checking for PQsetClientEncoding()... yes
checking for rb_encdb_alias()... yes
checking for rb_enc_alias()... no
checking for struct pgNotify.extra in libpq-fe.h... yes0
checking for unistd.h... yes
checking for ruby/st.h... yes
creating extconf.h
creating Makefile

make
compiling compat.c
compiling pg.c
pg.c: In function ‘pgconn_wait_for_notify’:
pg.c:2117:3: warning: ‘rb_thread_select’ is deprecated (declared at /usr/include/ruby-1.9.1/ruby/intern.h:379) [-Wdeprecated-declarations]
pg.c: In function ‘pgconn_block’:
pg.c:2592:3: error: format not a string literal and no format arguments [-Werror=format-security]
pg.c:2598:3: warning: ‘rb_thread_select’ is deprecated (declared at /usr/include/ruby-1.9.1/ruby/intern.h:379) [-Wdeprecated-declarations]
pg.c:2607:4: error: format not a string literal and no format arguments [-Werror=format-security]
pg.c: In function ‘pgconn_locreate’:
pg.c:2866:11: warning: variable ‘lo_oid’ set but not used [-Wunused-but-set-variable]
pg.c: In function ‘find_or_create_johab’:
pg.c:3947:3: warning: implicit declaration of function ‘rb_encdb_alias’ [-Wimplicit-function-declaration]
cc1: some warnings being treated as errors
make: *** [pg.o] Error 1

я успешно установил новейшую версию pg gem, но мне действительно нужно работать с версией 0.12.2

заранее спасибо


person Fernando Ribeiro    schedule 29.10.2012    source источник


Ответы (3)


установить

$ sudo apt-get install ruby-dev build-essential

or

$ sudo apt-get install postgresql-client libpq5 libpq-dev
$ sudo gem install pg

обновить

Вот шаги, которые я выполнил:

Установите PostgreSQL и пакет разработки

$ sudo apt-get install postgresql-9.1
$ sudo apt-get install libpq-dev

Настройте пользователя, который совпадает с моим логином Ubuntu

$ sudo su postgres -c psql
postgres=# CREATE ROLE <username> SUPERUSER LOGIN;
postgres=# \q

Изменить Gemfile

# Remove gem 'sqlite3'
gem 'pg'

Измените файл database.yml в каталоге приложения

development:
  adapter: postgresql
  encoding: unicode
  database: appname_development
  pool: 5
  timeout: 5000
  username: <username>
  password:

test:
  adapter: postgresql
  encoding: unicode
  database: appname_test
  pool: 5
  timeout: 5000
  username: <username>
  password:

Запустить пакетную установку

$ bundle install

Создание баз данных и миграции

$ rake db:create:all
$ rake db:migrate

Вот источники, которые мне помогли:
http://mrfrosti.com/2011/11/postgresql-for-ruby-on-rails-on-ubuntu/
http://railsless.blogspot.in/2012/05/howto-install-postgresql-in-ubuntu11.html

person Dipak Panchal    schedule 29.10.2012
comment
они у меня уже установлены, но я продолжаю получать ту же ошибку - person Fernando Ribeiro; 29.10.2012

# add a --with-cflags option
gem install --with-cflags="-O2 -pipe -march=native -w"

or

# change your user-level bundle config options for pg and run
# bundle install within the project
bundle config build.pg --with-cflags="-O2 -pipe -march=native -w"
cd ${project_dir}
bundle install

Имейте в виду, что это изменит ${HOME}/.bundle/config, поэтому каждый пользователь, работающий с проектом, должен будет выполнить эту команду на каждой машине, на которой он работает.

Этот параметр CFLAGS переопределит текущие общесистемные значения, включая -Werror=format-security. Я считаю, что реальным решением было бы исправить гем pg, чтобы этот установленный флаг не имел значения, но я не смотрел код для pg.

person bbates    schedule 23.01.2013

Взгляните на сообщение об ошибке:

ОШИБКА: при выполнении gem... (Gem::FilePermissionError) У вас нет прав на запись в каталог /var/lib/gems/1.9.1.

Вы уверены, что выполнили свою команду с помощью sudo? это ошибка разрешения на запись.

person Yunwei.W    schedule 29.10.2012
comment
Команда была запущена с помощью sudo. Ошибка разрешения произошла в предыдущей команде, которая не видна в тексте. - person Jacob Dalton; 08.03.2013