当我尝试运行 Ruby on Rails 应用程序时......我面临以下错误
符号查找错误:/home/user/.rvm/gems/ruby-1.9.2-preview3/gems/sqlite3-ruby-1.3.0/lib/sqlite3/sqlite3_native.so:未定义符号:sqlite3_initialize
我不知道究竟是什么错误。任何人都可以帮我解决这个问题......
当我尝试运行 Ruby on Rails 应用程序时......我面临以下错误
符号查找错误:/home/user/.rvm/gems/ruby-1.9.2-preview3/gems/sqlite3-ruby-1.3.0/lib/sqlite3/sqlite3_native.so:未定义符号:sqlite3_initialize
我不知道究竟是什么错误。任何人都可以帮我解决这个问题......
sqlite3-ruby
今天早上升级到 1.3.0后我遇到了同样的问题。快速修复是卸载 1.3.0 并确保安装了 1.2.5:
gem uninstall sqlite3-ruby --version 1.3.0
gem install sqlite3-ruby --version 1.2.5
更好的选择是将您的 gem 配置设置为忽略 1.3.0。对于 Rails 2.x,在config/environment.rb
:
config.gem 'sqlite3-ruby', :lib => 'sqlite3', :version => '!= 1.3.0'
或者如果你想让它玩起来真的很安全,明确地拉入 1.2.5:
config.gem 'sqlite3-ruby', :lib => 'sqlite3', :version => '1.2.5'
如果您将 gemfile 锁定到 sqlite3-ruby,您将在最近的 Rails 版本上启动应用程序时遇到问题,因为 Rails 希望将 gem 命名为“sqlite3”。这个问题的真正解决方案是确保 gem 创建的 .bundle 文件确实链接到正确的 sqlite3 库。
默认情况下,sqlite3 gem 将链接到 /usr/lib 中不存在的库。这个不对。您需要做的是直接为您的系统设置编译选项并重新安装 sqlite3 gem,您可以轻松地使用
$bundle config
他们的手册页指定了它的作用,但这是我需要执行的命令(我从他们的站点自行安装了 SQLite,而不是通过 brew 或 macports)。
$bundle config build.sqlite3 --with-sqlite3-include=/usr/local/include --with-sqlite3-lib=/usr/local/lib
当您尝试“捆绑安装”它时,这将始终为 gem 提供正确的选项,并且您的 gem 将正确构建。
请注意,这个问题有点狡猾,因为它不会在 Ruby 1.9 上发生 - 显然 rbconfig 已经更新并且可以更好地查找库。但是,当您要获得 1.8 兼容性时 - 使用此捆绑配置,您将万事俱备。
我在 Dreamhost 服务器上遇到了同样的问题:
> bundle exec rails c
ruby: symbol lookup error: /home/user/settings/installs/rubygems/gems/gems/sqlite3-ruby-1.3.0/lib/sqlite3/sqlite3_native.so: undefined symbol: sqlite3_initialize
我在我的主目录中手动下载并安装了SQLite3,并将 LD_LIBRARY_PATH 添加到我的 .bashrc 中。这解决了 Rails 控制台问题。
但是,我还没有让应用程序在乘客中启动,我仍在努力。
Ruby Enterprise Edition自动安装 sqlite3 gem,1.3.0 似乎是问题所在。
如果您的 Rails 应用不需要 sqlite3,请尝试卸载 gem 并重新启动您的应用。
sudo gem uninstall sqlite3