I'm trying to get the sqlite3-ruby gem (version 1.3.4) installed on my account (CentOS on shared hosting, so I need to install this without root) and the version of sqlite installed is not new enough for more recent versions of sqlite3-ruby, so I need to compile the libraries under my account. The version of sqlite I'm using is 1.7.0 as I found there were issues with the more recent versions.
I've gone ahead and done this already - I downloaded sqlite-3.7.0.tar.gz and installed it as follows:
./configure –prefix=$HOME
make && make install
Then went to my rails 3 application and ran the following:
bundle config build.sqlite3-ruby “--with-sqlite3-include=$HOME/include --with-sqlite3-lib=$HOME/lib”
Then:
bundle install --path vendor/bundle
However, I get the following and my bundle fails to fully install:
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
Any ideas? This used to work, but with more recent versions of sqlite3-ruby it seems like it's a no go anymore.
Here's some additional info:
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
Edit:
I went ahead and changed from sqlite3-ruby to sqlite3 in my Gemfile and ran the following:
bundle config build.sqlite3 “--with-sqlite3-include=$HOME/include --with-sqlite3-lib=$HOME/lib --with-sqlite3-dir=$HOME”
This error message got me:
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
Any other ideas?
On CentOS, you can use yum (verified works)
Here's the solution, which I've verified works.
.bash_profile setup:
Then run:
Make sure a line similar to this is in the Gemfile: gem 'sqlite3', "1.3.4"
So, CentOS user needs to:
then, unpack and:
then try
gem install sqlite3
AGAIN.Install "sqlite-devel" package to build native extensions of "sqlite3" gem on RH-based systems.
On Debian-based systems install "libsqlite3-dev" package.
On Ubuntu:
Then bundle install will work.