Ruby 使用sqlite gem中的非默认sqlite3可执行文件
我编译了一个定制的sqlite3可执行文件,以支持ICU(排序规则:utf-8的重音排序等) 我使用rvm,ruby sqlite gem似乎使用:Ruby 使用sqlite gem中的非默认sqlite3可执行文件,ruby,sqlite,sequel,Ruby,Sqlite,Sequel,我编译了一个定制的sqlite3可执行文件,以支持ICU(排序规则:utf-8的重音排序等) 我使用rvm,ruby sqlite gem似乎使用: ~/.rvm/gems/ruby-1.9.3-p392@project/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.so 我的db创建代码需要排序规则,因此当我使用sqlite gem时,会出现一个错误: /home/user/.rvm/gems/ruby-1.9.3-p392@project/ge
~/.rvm/gems/ruby-1.9.3-p392@project/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.so
我的db创建代码需要排序规则,因此当我使用sqlite gem时,会出现一个错误:
/home/user/.rvm/gems/ruby-1.9.3-p392@project/gems/sqlite3-1.3.7/lib/sqlite3/database.rb:91:in `initialize': SQLite3::SQLException: no such function: icu_load_collation (Sequel::DatabaseError)
…这是有意义的,因为默认sqlite没有内置的排序规则
当我直接使用自定义sqlite3可执行文件时,一切正常
我的问题如下:
$ mkdir ~/.bundle
$ echo "BUNDLE_BUILD__SQLITE3: --with-opt-include=/home/user/local/lib/sqlite-autoconf-3071602/ --with-opt-lib=/home/user/local/lib/sqlite-autoconf-3071602/.libs --with-cflags='-O3 -DSQLITE_ENABLE_ICU' --with-cppflags=`icu-config --cppflags` --with-ldflags=`icu-config --ldflags`" > ~/.bundle/config
K.我终于成功了。要在使用特定选项编译本机扩展(如对sqlite的ICU支持)时安装gem,需要执行以下操作:
$ gem install sqlite3 --verbose -- \
--with-opt-include=/home/user/local/lib/sqlite-autoconf-3071602/ \
--with-opt-lib=/home/user/local/lib/sqlite-autoconf-3071602/.libs \
--with-cflags='-O3 -DSQLITE_ENABLE_ICU' \
--with-cppflags=`icu-config --cppflags` \
--with-ldflags=`icu-config --ldflags`
在这两个“空”破折号后面的任何东西“-”都是gem构建过程中的参数。这假设sqlite3的src发行版在以下位置解压缩:/home/user/local/lib/sqlite-autoconf-3071602/
现在,因为我使用bundler,所以我希望这是自动化的。为此,可以使用以下命令:
bundle config build.sqlite3 --with-opt-include=/home/user/local/lib/sqlite-autoconf-3071602/ ...
。。。这意味着无论何时安装sqlite3 gem,都要在构建过程中传递以下选项。这将创建一个~/.bundle/config
文件,其中包含该gem的条目,例如,该文件将具有:
BUNDLE_BUILD__SQLITE3: --with-opt-include=/home/karask/local/lib/sqlite-autoconf-3071602/ --with-opt-lib=/home/karask/local/lib/sqlite-autoconf-3071602/.libs --with-cflags='-O3 -DSQLITE_ENABLE_ICU' --with-cppflags=`icu-config --cppflags` --with-ldflags=`icu-config --ldflags`
然而,这对我来说并不合适。由于某种原因,~/.bundle/config
中的条目不正确。我试着引用和逃避了好几种组合,但都没有成功。最后,我通过添加以下内容,在部署过程(shell脚本)中手动创建此条目:
$ mkdir ~/.bundle
$ echo "BUNDLE_BUILD__SQLITE3: --with-opt-include=/home/user/local/lib/sqlite-autoconf-3071602/ --with-opt-lib=/home/user/local/lib/sqlite-autoconf-3071602/.libs --with-cflags='-O3 -DSQLITE_ENABLE_ICU' --with-cppflags=`icu-config --cppflags` --with-ldflags=`icu-config --ldflags`" > ~/.bundle/config
我终于成功了。要在使用特定选项编译本机扩展(如对sqlite的ICU支持)时安装gem,需要执行以下操作:
$ gem install sqlite3 --verbose -- \
--with-opt-include=/home/user/local/lib/sqlite-autoconf-3071602/ \
--with-opt-lib=/home/user/local/lib/sqlite-autoconf-3071602/.libs \
--with-cflags='-O3 -DSQLITE_ENABLE_ICU' \
--with-cppflags=`icu-config --cppflags` \
--with-ldflags=`icu-config --ldflags`
在这两个“空”破折号后面的任何东西“-”都是gem构建过程中的参数。这假设sqlite3的src发行版在以下位置解压缩:/home/user/local/lib/sqlite-autoconf-3071602/
现在,因为我使用bundler,所以我希望这是自动化的。为此,可以使用以下命令:
bundle config build.sqlite3 --with-opt-include=/home/user/local/lib/sqlite-autoconf-3071602/ ...
。。。这意味着无论何时安装sqlite3 gem,都要在构建过程中传递以下选项。这将创建一个~/.bundle/config
文件,其中包含该gem的条目,例如,该文件将具有:
BUNDLE_BUILD__SQLITE3: --with-opt-include=/home/karask/local/lib/sqlite-autoconf-3071602/ --with-opt-lib=/home/karask/local/lib/sqlite-autoconf-3071602/.libs --with-cflags='-O3 -DSQLITE_ENABLE_ICU' --with-cppflags=`icu-config --cppflags` --with-ldflags=`icu-config --ldflags`
然而,这对我来说并不合适。由于某种原因,~/.bundle/config
中的条目不正确。我试着引用和逃避了好几种组合,但都没有成功。最后,我通过添加以下内容,在部署过程(shell脚本)中手动创建此条目:
$ mkdir ~/.bundle
$ echo "BUNDLE_BUILD__SQLITE3: --with-opt-include=/home/user/local/lib/sqlite-autoconf-3071602/ --with-opt-lib=/home/user/local/lib/sqlite-autoconf-3071602/.libs --with-cflags='-O3 -DSQLITE_ENABLE_ICU' --with-cppflags=`icu-config --cppflags` --with-ldflags=`icu-config --ldflags`" > ~/.bundle/config
我想使用Ubuntu18.10中提供的SQLite 3.24.0中没有的,这里有一种编译SQLite 3.28.0的方法(Ubuntu19.04附带SQLite 3.27):
#最好安装系统包,以确保您具有必要的依赖项:
sudo-apt安装libsqlite3-dev
wgethttps://sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz
tar xzf sqlite.tar.gz
mkdir构建
光盘制作
../sqlite/configure
export CFLAGS='-DSQLITE\u ENABLE\u COLUMN\u METADATA-DSQLITE\u ENABLE\u DBSTAT\u VTAB-DSQLITE\u ENABLE\u ENABLE\u LOAD\u EXTENSION-DSQLITE\u ENABLE\u PREUPDATE\u HOOK-DSQLITE\u ENABLE\u RTREE-DSQLITE\u ENABLE\u SESSION-DSQLITE\u STMTVTAB-DSQLITE\u ENABLE\u UNKNOWN\u SQL\u函数-DSQLITE\u ENABLE\u UNLOCK\u NOTIFY-DSQLITE\u更新限制-DSQLITE\u MAX\u SCHEMA\u RETRY=25-DSQLITE\u MAX\u VARIABLE\u NUMBER=250000-DSQLITE\u省略\u LOOKASIDE-DSQLITE\u SECURE\u DELETE-DSQLITE\u SOUNDEX-DSQLITE\u ENABLE\u EXPLAIN\u COMMENTS-DHAVE\u USLEEP-DHAVE\u READLINE-DHAVE\u ISNAN-DSQLITE\u LIKE\u不匹配\u BLOBS-DSQLITE\u线程安全=1-DSQLITE\u ENABLE\FTS4
make OPTS=“$CFLAGS”
gem安装sqlite3--详细--\
--with-sqlite3-include=`readlink-f.`\
--with-sqlite3-lib=`readlink-f.libs`\
--使用cflags=“$cflags”
可以通过via检查gem编译的sqlite版本
需要'sqlite3'
将SQLite3::SQLITE_版本#=>3.28.0
或者尝试使用窗口功能:
需要'sqlite3'
需要“绝妙打印”
db=SQLite3::Database.new(“:内存:”)
db.results\u as\u hash=true
db.execute我想使用Ubuntu18.10附带的SQLite 3.24.0中没有的,这里有一种编译SQLite 3.28.0的方法(Ubuntu19.04附带SQLite 3.27):
#最好安装系统包,以确保您具有必要的依赖项:
sudo-apt安装libsqlite3-dev
wgethttps://sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz
tar xzf sqlite.tar.gz
mkdir构建
光盘制作
../sqlite/configure
export CFLAGS='-DSQLITE\u ENABLE\u COLUMN\u METADATA-DSQLITE\u ENABLE\u DBSTAT\u VTAB-DSQLITE\u ENABLE\u ENABLE\u LOAD\u EXTENSION-DSQLITE\u ENABLE\u PREUPDATE\u HOOK-DSQLITE\u ENABLE\u RTREE-DSQLITE\u ENABLE\u SESSION-DSQLITE\u STMTVTAB-DSQLITE\u ENABLE\u UNKNOWN\u SQL\u函数-DSQLITE\u ENABLE\u UNLOCK\u NOTIFY-DSQLITE\u更新限制-DSQLITE\u MAX\u SCHEMA\u RETRY=25-DSQLITE\u MAX\u VARIABLE\u NUMBER=250000-DSQLITE\u省略\u LOOKASIDE-DSQLITE\u SECURE\u DELETE-DSQLITE\u SOUNDEX-DSQLITE\u ENABLE\u EXPLAIN\u COMMENTS-DHAVE\u USLEEP-DHAVE\u READLINE-DHAVE\u ISNAN-DSQLITE\u LIKE\u不匹配\u BLOBS-DSQLITE\u线程安全=1-DSQLITE\u ENABLE\FTS4
make OPTS=“$CFLAGS”
gem安装sqlite3--详细--\
--with-sqlite3-include=`readlink-f.`\
--with-sqlite3-lib=`readlink-f.libs`\
--使用cflags=“$cflags”
可以通过via检查gem编译的sqlite版本
需要'sqlite3'
将SQLite3::SQ