【发布时间】:2012-02-04 14:37:50
【问题描述】:
使用 Mac OS X 10.5.8(豹) 红宝石 1.9.3p0 宝石版本 1.8.14 sqlite3 版本 3.7.9
我还安装了 Xcode 3.1.4(不确定这是否用于安装 gems)。
我拿到了 sqlite3 gem
gem fetch sqlite3
然后解压
gem unpack sqlite3-1.3.5.gem
然后 cd 到新目录
cd sqlite3-1.3.5
执行
ruby setup.rb config
然后 cd'ed 到 ext/sqlite3
然后执行make
这将返回以下错误消息:
usernamemac:sqlite3 username$ make
compiling backup.c
compiling 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:79: error: 'SQLITE_OPEN_READONLY' undeclared (first use in this function)
database.c:81: warning: implicit declaration of function 'sqlite3_open_v2'
database.c: In function 'set_sqlite3_func_result':
database.c:285: error: 'sqlite3_int64' undeclared (first use in this function)
database.c:285: error: syntax error before 'long'
make: *** [database.o] Error 1
在 gem 的 README.rdoc 文件中,我读到“启用选项 SQLITE_ENABLE_COLUMN_METADATA(有关详细信息,请参阅 www.sqlite.org/compile.html)”,但不明白应该做什么。
谁能帮我解决这个问题?
我尝试过其他方法,例如 Error with MySql while doing Bundle Install 和I can't install sqlite3 gem 但这些对我不起作用。
更新:我在尝试时遇到了类似的问题
rails new app1 -d mysql
create vendor/plugins/.gitkeep
run bundle install
/Users/username/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/generators/app_base.rb:232: warning: Insecure world writable dir /usr/local in PATH, mode 040777
/Users/username/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:209: warning: Insecure world writable dir /usr/local in PATH, mode 040777
Fetching source index for http://rubygems.org/
Installing rake (0.9.2.2)
...
Installing jquery-rails (1.0.19)
Installing mysql2 (0.3.11) with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/Users/username/.rbenv/versions/1.9.3-p0/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
... (list of switches)
Gem files will remain installed in /Users/username/a/app1/vendor/bundle/gems/mysql2-0.3.11 for inspection.
Results logged to /Users/username/a/app1/vendor/bundle/gems/mysql2-0.3.11/ext/mysql2/gem_make.out
An error occured while installing mysql2 (0.3.11), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.11'` succeeds before bundling.
我已经安装了 gem mysql2 (0.3.11)。
更新2:执行时
gem update
在更新 sqlite3-ruby gem 时,我得到以下信息:
Updating sqlite3-ruby
Building native extensions. This could take a while...
/Users/username/.rbenv/versions/1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/ext/builder.rb:48: warning: Insecure world writable dir /usr/local in PATH, mode 040777
ERROR: Error installing sqlite3-ruby:
ERROR: Failed to build gem native extension.
/Users/username/.rbenv/versions/1.9.3-p0/bin/ruby extconf.rb
checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... yes
checking for rb_proc_arity()... yes
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
compiling backup.c
compiling 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:79: error: 'SQLITE_OPEN_READONLY' undeclared (first use in this function)
database.c:81: warning: implicit declaration of function 'sqlite3_open_v2'
database.c: In function 'set_sqlite3_func_result':
database.c:285: error: 'sqlite3_int64' undeclared (first use in this function)
database.c:285: error: syntax error before 'long'
make: *** [database.o] Error 1
Gem files will remain installed in /Users/username/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/sqlite3-1.3.5 for inspection.
Results logged to /Users/username/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/sqlite3-1.3.5/ext/sqlite3/gem_make.out
Gems updated: activesupport, activemodel, rack, journey, sprockets, actionpack, railties, coffee-rails, jquery-rails, minitest, rubygems-update, sass-rails
Installing ri documentation for activesupport-3.2.0.rc2...
谢谢
【问题讨论】:
-
sqlite 是什么版本?
sqlite3 --version -
我可以问一个愚蠢的问题 - 做
gem install sqlite3有什么问题吗?这太容易了吗? ;) 顺便说一句,宝石不依赖于 XCode(除非他们指定它)。 -
@Iain 使用 gem install sqlite3 我收到错误:安装 sqlite3 时出错:错误:无法构建 gem 原生扩展。然后是“database.c: In function 'initialize':”中的上述错误。
-
你会粘贴你的 PATH 和 sqlite3 的路径吗?
-
@Iain 使用 which 命令:sqlite3 是 /usr/bin/sqlite3 并使用 gem 环境:GEM PATHS: - /Users/username/.rbenv/versions/1.9.3-p0/lib/ ruby/gems/1.9.1 - /Users/username/.gem/ruby/1.9.1
标签: ruby-on-rails macos sqlite rubygems sqlite3-ruby