2011-07-28 23 views
15

Estoy tratando de instalar la gema sqlite3-ruby (versión 1.3.4) en mi cuenta (CentOS en hosting compartido, así que necesito instalar esto sin root) y la versión de sqlite instalado no es lo suficientemente nuevo para las versiones más recientes de sqlite3-ruby, así que tengo que compilar las bibliotecas en mi cuenta. La versión de sqlite que estoy usando es 1.7.0 porque descubrí que había problemas con las versiones más recientes.Error al instalar la gema sqlite3 a través del paquete

he ido por delante y hecho esto ya - He descargado sqlite-3.7.0.tar.gz e instalado de la siguiente manera:

./configure –prefix=$HOME 
make && make install 

luego fue a mis carriles 3 y corrieron aplicación lo siguiente:

bundle config build.sqlite3-ruby “--with-sqlite3-include=$HOME/include --with-sqlite3-lib=$HOME/lib” 

continuación:

bundle install --path vendor/bundle 

Sin embargo, me sale el siguiente paquete y mi falla totalmente insta a ll:

Installing sqlite3 (1.3.4) with native extensions /usr/lib/ruby/site_ruby/1.8/rubygems/installer.rb:533:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) 

     /usr/bin/ruby extconf.rb 
checking for sqlite3.h... yes 
checking for sqlite3_libversion_number() in -lsqlite3... yes 
checking for rb_proc_arity()... no 
checking for sqlite3_initialize()... no 
checking for sqlite3_backup_init()... no 
checking for sqlite3_column_database_name()... no 
checking for sqlite3_enable_load_extension()... no 
checking for sqlite3_load_extension()... no 
creating Makefile 

make 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -g -O2 -fPIC -c sqlite3.c 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -g -O2 -fPIC -c exception.c 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -g -O2 -fPIC -c backup.c 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -g -O2 -fPIC -c database.c 
database.c: In function 'initialize': 
database.c:47: error: 'SQLITE_OPEN_READWRITE' undeclared (first use in this function) 
database.c:47: error: (Each undeclared identifier is reported only once 
database.c:47: error: for each function it appears in.) 
database.c:47: error: 'SQLITE_OPEN_CREATE' undeclared (first use in this function) 
database.c:72: error: 'SQLITE_OPEN_READONLY' undeclared (first use in this function) 
database.c: In function 'set_sqlite3_func_result': 
database.c:278: error: 'sqlite3_int64' undeclared (first use in this function) 
make: *** [database.o] Error 1 

¿Alguna idea? Esto solía funcionar, pero con las versiones más recientes de sqlite3-ruby parece que ya no se usa.

Aquí hay algo de información adicional:

rails -v 
Rails 3.0.9 

gem -v 
1.7.2 

.bash_profile: 

PATH=$HOME/bin:$PATH 
GEM_HOME=$HOME/gems 
GEM_PATH=$HOME/gems 
export LD_LIBRARY_PATH=$HOME/lib 
export USERNAME BASH_ENV PATH GEM_HOME GEM_PATH 

which sqlite3 
/home/striketh/bin/sqlite3 

Editar:

que siguió adelante y cambió de sqlite3-ruby a Sqlite3 en mi Gemfile y encontré lo siguiente:

bundle config build.sqlite3 “--with-sqlite3-include=$HOME/include --with-sqlite3-lib=$HOME/lib --with-sqlite3-dir=$HOME” 

Este error mensaje me consiguió:

make 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -DHAVE_SQLITE3_INITIALIZE -DHAVE_SQLITE3_BACKUP_INIT -I/home/striketh”/include -fPIC -g -O2 -fPIC -c sqlite3.c 
In file included from ./sqlite3_ruby.h:42, 
       from sqlite3.c:1: 
./backup.h:7: error: expected specifier-qualifier-list before 'sqlite3_backup' 
make: *** [sqlite3.o] Error 1 

¿Alguna otra idea?

+0

reconstrucción sqlite3 con homebrew o macports. – s84

+0

@Codeglot ¿En CentOS? Buena suerte con eso :). –

+0

@Striketh Además de sqlite3, también debe tener instaladas algunas bibliotecas de desarrollo sqlite3, desafortunadamente no sé exactamente cuáles. en Debian es libsqlite3-dev y libsqlite3-0. –

Respuesta

13

Aquí está la solución, que he verificado funciona.

configuración .bash_profile:

# .bash_profile 

# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
. ~/.bashrc 
fi 

# User specific environment and startup programs 

PATH=$HOME/bin:$PATH 
GEM_HOME=$HOME/gems 
GEM_PATH=$HOME/gems 
export LD_LIBRARY_PATH=$HOME/lib 
export USERNAME BASH_ENV PATH GEM_HOME GEM_PATH 

A continuación, ejecute:

wget http://www.sqlite.org/sqlite-autoconf-3070701.tar.gz 
tar -zxvf sqlite-autoconf-3070701.tar.gz 
cd sqlite-autoconf-3070701 
./configure --prefix=$HOME 
make && make install 

cd $RAILS_APP_DIR 
vi Gemfile 

Asegúrese de que una línea similar a esta se encuentra en la Gemfile: joya 'sqlite3', "1.3.4"

bundle config build.sqlite3 --with-sqlite3-include=$HOME/include --with-sqlite3-lib=$HOME/lib --with-sqlite3-dir=$HOME/bin 
bundle install --path vendor/bundle 
+0

Tengo el mismo error de compilación en mi host CentOS con sqlite 3.3.6, rieles 3.0.9, gem 1.5.2. Tengo acceso de root al sistema y mis gemas están en/opt, por lo que no estoy seguro de cómo aplicar tu solución. ¿Me puede dar una pista que pueda ayudarme a compilar esto? ¿Debo instalar sqlite-autoconf? Solo estoy usando el paquete de uno de mis repositorios. – Arosboro

+4

Solo para futuras referencias, la gema sqlite3 requiere sqlite 3.6.16+. CentOS tiene v3.3.6 que no funciona con la gema. – Augusto

+1

Gracias por la sugerencia con el requisito de versión sqlite. La compilación desde el origen y la instalación con 'gem install sqlite3 --with-sqlite-dir =/usr/local' hizo el truco en CentOS. – Thilo

6

Instalar paquete "sqlite-devel" para construir extensiones nativas de gema "sqlite3" en sistemas basados ​​en RH.

En sistemas basados ​​en Debian se instalan "libsqlite3-dev" paquete.

+0

sqlite-devel ya está instalado: rpm -qa | grep sqlite-devel sqlite-devel-3.3.6-5 sqlite-devel-3.3.6-5 – Striketh

+0

@Striketh Usted está tratando de instalar 'sqlite3-ruby' o una gema 'sqlite3'? 'Sqlite3' es preferible. –

+0

Ver mi edición superior. – Striketh

1

gema sqlite3 requires sqlite 3.6.16+. CentOS tiene v3.3.6

Por lo tanto, es necesario que el usuario CentOS:

wget "http://www.sqlite.org/sqlite-autoconf-3071000.tar.gz" 

continuación, desempaquetar y:

cd sqlite-autoconf-3071000 
./configure --prefix=/usr/local/sqlite-3.7 
make 
make && install 

continuación, intente gem install sqlite3 DE NUEVO.

11

En Ubuntu:

sudo apt-get install libsqlite3-dev 

Entonces bundle install va a funcionar.

2

en CentOS, puede utilizar yum (trabajos verificados)

yum install sqlite sqlite-devel 
gem install sqlite3