【问题标题】:uninitialized constant MysqlCompat::MysqlRes (using mms2r gem)未初始化的常量 MysqlCompat::MysqlRes(使用 mms2r gem)
【发布时间】:2010-11-22 20:44:24
【问题描述】:

将我的一个 Rails 应用程序移到了新服务器上,并且必须安装一些 gem 依赖项。但是,在安装 mysql gem 之后,每当我尝试运行涉及 mysql 数据库的 rake 命令时,我都会收到错误,未初始化的常量 MysqlCompat::MysqlRes。似乎只有在需要 mms2r gem 时才会出现此错误。有没有人听说过这个?我正在运行 mysql 2.8.1 gem。

【问题讨论】:

  • 这个问题也会影响其他宝石——幸运的是,下面的 Markus 修复适用于所有宝石

标签: mysql ruby-on-rails rake


【解决方案1】:

在我的 Mac OS X 10.6 上,我这样做是为了安装 2.8.1 gem,它与我的 MacPorts mysql5-server 完美配合:

sudo env ARCHFLAGS="-arch x86_64" gem install mysql

【讨论】:

  • 使用 rvm 时,这条线在前面没有 sudo 的情况下工作。
  • @KyleHeironimus - “使用 rvm 时”是什么意思?我已经安装了 rvm,但是当我在没有 sudo 的情况下运行命令时,我得到“你没有写权限......”。我必须做些什么不同的事情才能使其“与 rvm”一起工作? (对不起,我对此很陌生。)
  • @callum - 如果你输入rvm list,它会显示一个红宝石列表并且其中一个是最新的,即它有=>吗?如果没有,您实际上并没有在项目中使用 rvm,因此正在尝试使用 OSX 本机 ruby​​ 实现来安装 gem。
【解决方案2】:

基本上问题是找不到动态库libmysqlclient。上述解决方案都可以使用,但您需要在任何时候重新构建 gem 或安装新版本的 MySQL 时重新应用它们。

另一种方法是将包含该库的 MySQL 目录添加到您的动态加载路径中。将以下内容放入我的 .bashrc 文件中解决了这个问题:

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"

【讨论】:

  • 如果你在 osx 10.8.2 中导出它,然后你 sudo,你会收到类似“DYLD_ 环境变量被忽略”的警告,但 it's just a warning
【解决方案3】:

我的问题是由于我的“mysql”是 32 位安装,而 ruby​​ 是 64 和 32 位。检查这些命令

 file `which mysql` 
 file `which ruby`

两者都应该匹配 Mach-O 64 位可执行 x86_64 或 Mach-O 64 位可执行 i386。我装了一个64位的mysql,然后

export ARCHFLAGS="-arch x86_64" ; sudo gem install --no-rdoc --no-ri mysql -v 2.7 -- --with-mysql-dir=/usr/local --with-mysql-config=/usr/local/mysql/bin/mysql_config

瞧!

【讨论】:

  • 这对我来说至关重要。 MySQL、Ruby 和 mysql/ruby gem 都必须是 64 位的。
【解决方案4】:

如果你有 mysql 5.5,请遵循:http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/

FTR:如果我不需要一些愚蠢的代表来投票,我会投票给相同的答案,请考虑这是我的投票。

【讨论】:

  • 这里有你的声望 LOL
【解决方案5】:

是的,我看到了类似的错误信息,寻找相同的不存在的类 MysqlCompat::MysqlRes

事实证明,该类不应该存在;该错误消息是由最新的 Mysql 驱动程序问题引起的。 mysql-2.8.1 在最后一个名为“mysql”的目录中查找我的库。例如,我的库(在 MacOS X 10.5.8 下)位于 /usr/local/mysql/lib 中,但 mysql.bundle 库在 /usr/local/mysql/lib/mysql 中查找 MySQL 库 ...这是错误的。

我发现很容易修复,方法是在 /usr/local/mysql/lib 中创建一个名为 'mysql' 的符号链接,它指向 '.'

因此,当以该额外深度引用库时,它们就会被发现并工作。这绝对是一个黑客;我相信有更合适的方法来解决这个问题。我只是需要它来工作,这样我才能继续做其他事情。

此外,这可能不适合您。如果您的错误如下所示,它可能会起作用:

  ./mysql.bundle: dlopen(./mysql.bundle, 9): Library not loaded: /usr/local/mysql/lib/mysql/libmysqlclient.15.dylib (LoadError)
  Referenced from: /Users/ccullen/Projects/npapp-v2/mysql-ruby-2.8.1/mysql.bundle
  Reason: image not found - ./mysql.bundle
    from test.rb:5

由于这似乎是最近的发展,我没有看到任何直接的回应,我想我会分享我是如何解决它的。祝你好运:)

【讨论】:

    【解决方案6】:

    gem install -v=2.7.1 也会修复它。

    【讨论】:

      【解决方案7】:

      在 gem(重新)安装时设置正确的 ARCHFLAGS 对我有帮助.. 不需要任何符号链接:

      http://joergbattermann.tumblr.com/post/181479575/fixing-the-nameerror-uninitialized-constant

      【讨论】:

        【解决方案8】:

        在将 Ubuntu 从 9.10 升级到 10.04 后,我出现了这个问题。

        这似乎是 mysql gem 的问题。

        症状:任何需要连接到 mysql 的 ActiveRecord 的使用都会产生来自“未初始化常量 MysqlCompat::MysqlRes”的堆栈跟踪

        我尝试了“gem update mysql”,发现无法构建原生扩展,因为编译器找不到 mysql_client 库。该库 (libmysqlclient.so.16) 位于 /usr/lib 中。

        修复 ubuntu 10.04:

        作为 root,我做了这些:

        apt-get install libmysqlclient-dev
        gem install mysql
        

        我注意到有几个不同的人在这里尝试,我想知道我们是否没有找到根本原因。

        人们需要在回答中澄清的变量:

        • 操作系统版本 - 您使用的是哪个版本?
        • 在哪里以及你是如何安装 mysql 的? - 这里的人似乎已经从 /usr/local 下的源代码安装了他们的 mysql(我通过 ubuntu 打包系统安装了我的)
        • 您使用的是 64 位 ubuntu 还是 32 位?(我目前使用的是 32 位。)

        【讨论】:

          【解决方案9】:

          使用 mysql gem (2.8.1) 我得到了

          未初始化的常量 MysqlCompat::MysqlRes

          使用 -v 2.7 使其完美运行,对于那些使用 Homebrew 安装 mysql 的人来说

          sudo gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/Cellar/mysql/5.1.48/bin/mysql_config

          请注意,如果需要,您可以更改 mysql 版本。

          【讨论】:

            【解决方案10】:

            sudo gem 安装 mysql -v 2.7 应该做的伎俩...

            【讨论】:

            • 对于 OS X,这个 (2.7) 应该可以工作; OS X 不存在 2.7.1
            【解决方案11】:

            sudo gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 在迁移到我的新 Snow Leopard 笔记本电脑时也对我有用。我没有使用 MacPorts 安装 mysql,而是使用二进制文件,并且没有使用 arch 标志解决方案或符号链接。

            【讨论】:

              【解决方案12】:

              我在这里尝试了所有其他方法,但仍然遇到问题。从 MySQL 5.5 降级到 5.1 为我修复了它。 (Mac OS X 10.6.5)

              【讨论】:

                【解决方案13】:

                降级(从 5.9)到 mysql 5.1 有助于 10.6 ...同时运行 mysql 和 mysql2 gems。

                【讨论】:

                  【解决方案14】:

                  mysql 和 mysql2 gem 都可以在 ruby​​ 1.9.2 上运行,只需更新 ruby​​ 并安装您需要的 gem。

                  【讨论】:

                    【解决方案15】:
                    gem uninstall mysql
                    
                    gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
                    
                    ldconfig /usr/local/mysql/lib/mysql
                    
                    RAILS_ENV=production rake db:migrate --trace
                    

                    这对我有用。

                    【讨论】:

                    • ldconfig 命令未找到,这是用于 mac 吗?对于Ubuntu?窗户?烤面包机?
                    【解决方案16】:
                    sudo apt-get install libmysqlclient15-dev
                    

                    【讨论】:

                      【解决方案17】:

                      我已经尝试了以上所有方法,但它们都不适合我。尝试安装 mysql 2.7 版时,出现错误:

                      sudo gem install -v=2.7.1 mysql -- --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config
                      ERROR:  could not find gem mysql locally or in a repository
                      F107PHD:stepgreen.org tdillahu$ sudo gem install -v=2.7 mysql -- --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config
                      Building native extensions.  This could take a while...
                      ERROR:  Error installing mysql:
                          ERROR: Failed to build gem native extension.
                      
                      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config
                      checking for mysql_query() in -lmysqlclient... no
                      checking for main() in -lm... no
                      checking for mysql_query() in -lmysqlclient... no
                      checking for main() in -lz... no
                      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
                      *** 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
                          --without-opt-dir
                          --with-opt-include
                          --without-opt-include=${opt-dir}/include
                          --with-opt-lib
                          --without-opt-lib=${opt-dir}/lib
                          --with-make-prog
                          --without-make-prog
                          --srcdir=.
                          --curdir
                          --ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
                          --with-mysql-config
                          --without-mysql-config
                          --with-mysql-dir
                          --with-mysql-include
                          --without-mysql-include=${mysql-dir}/include
                          --with-mysql-lib
                          --without-mysql-lib=${mysql-dir}/lib
                          --with-mysqlclientlib
                          --without-mysqlclientlib
                          --with-mlib
                          --without-mlib
                          --with-mysqlclientlib
                          --without-mysqlclientlib
                          --with-zlib
                          --without-zlib
                          --with-mysqlclientlib
                          --without-mysqlclientlib
                          --with-socketlib
                          --without-socketlib
                          --with-mysqlclientlib
                          --without-mysqlclientlib
                          --with-nsllib
                          --without-nsllib
                          --with-mysqlclientlib
                          --without-mysqlclientlib
                      
                      
                      Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql-2.7 for inspection.
                      Results logged to /Library/Ruby/Gems/1.8/gems/mysql-2.7/gem_make.out
                      

                      我原来的错误: 中止! 未初始化常量 MysqlCompat::MysqlRes /vendor/rails/activesupport/lib/active_support/dependencies.rb:440:in load_missing_constant' /vendor/rails/activesupport/lib/active_support/dependencies.rb:80:inconst_missing'

                      【讨论】:

                      • 为了解决这个问题,我不得不使用(--with-mysql-config= 而不是--with-mysql-dir): sudo gem install mysql -- --with-mysql- config=/usr/local/mysql-5.0.86-osx10.5-x86/bin/mysql_config.
                      • 如果你的 mysql 安装在 /usr/local/ 下就可以了,但是如果你的 mysql 是从包管理器安装的,你在哪里可以找到 mysql_config?
                      【解决方案18】:

                      从 Fedora 10 升级到 Fedora 12 后,我遇到了同样的问题。我通过卸载 mysql gem 并重新安装来修复它。所以它符合新版本的MySQL。

                      【讨论】:

                        【解决方案19】:

                        sudo gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

                        非常适合我:)

                        【讨论】:

                          【解决方案20】:

                          在 Mac OS X 10.6.4 上,我必须指定架构和配置目录:

                          sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

                          【讨论】:

                            【解决方案21】:

                            如果你的 Mysql 版本是 5.5,你应该卸载它。我刚刚留下了一篇关于使用 mysql 和 ruby​​ 的文章:http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/

                            【讨论】:

                              【解决方案22】:

                              这对我有用。我阅读了大量帖子,发现使用系统 ruby​​ 安装会导致不兼容问题:

                              1. 不要使用默认的 ruby​​ 安装! 用 macports 安装 ruby​​
                              2. 不要使用默认的 ruby​​gems 安装! 使用 macports 安装 rb-rubygems
                              3. 使用 mysql 5.1(不是 5.5)- 从 mysql.com mac .dmg 安装
                              4. 4.

                              sudo env ARCHFLAGS="-arch x86_64" gem 安装mysql—— --with-mysql-config=/usr/local/mysql/bin/mysql_config

                              【讨论】:

                                【解决方案23】:
                                sudo env ARCHFLAGS="-arch x86_64" gem install mysql
                                

                                来自 mysql 站点的 Dmg 包一个 ddone!

                                【讨论】:

                                  【解决方案24】:
                                  sudo gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 
                                  

                                  当拱标志和符号链接没有时也为我工作!谢谢!!

                                  【讨论】:

                                    【解决方案25】:

                                    mysql依赖与mms2r有什么关系?顺便说一句,我是 mms2r 的作者。

                                    mms2r gemspec https://github.com/monde/mms2r/blob/master/mms2r.gemspec 没有列出 mysql 依赖项。

                                    【讨论】:

                                      猜你喜欢
                                      • 2011-07-14
                                      • 2011-07-20
                                      • 1970-01-01
                                      • 2011-06-22
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2011-12-15
                                      相关资源
                                      最近更新 更多