Rails、MySQL 和雪豹

Posted

技术标签:

【中文标题】Rails、MySQL 和雪豹【英文标题】:Rails, MySQL and Snow Leopard 【发布时间】:2010-11-02 18:21:59 【问题描述】:

我使用我们在 WWDC 获得的光盘升级到了 Snow Leopard。

尝试运行我的一些 Rails 应用程序现在抱怨 sql

    (in /Users/coneybeare/Projects/Ambiance/ambiance-server)
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
Importing all sounds in /Users/coneybeare/Projects/Ambiance/ambiance-sounds/Import 32/Compressed/

 -- AdirondackPeepers.caf
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
dlopen(/opt/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle, 9): Library not loaded: /usr/local/mysql/lib/libmysqlclient.16.dylib
  Referenced from: /opt/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle
  Reason: image not found - /opt/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle

(See full trace by running task with --trace)

我可以发誓我以前修过一次。问题是

sudo gem install mysql

不起作用并给出错误:

 Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
    ERROR: Failed to build gem native extension.

/opt/local/bin/ruby extconf.rb install mysql
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


Gem files will remain installed in /opt/local/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.
Results logged to /opt/local/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out

有没有人让mysql在雪豹上使用rails?如果是这样,你的设置是什么?更好的是,我能做些什么来重现它?

【问题讨论】:

【参考方案1】:

设置 ARCHFLAGS 和传递 --mysql-config=... 的说明似乎不足以在 Snow Leopard 上为我解决这个问题。除了这样做,我还补充说:

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

到我的 bash 个人资料,这为我解决了问题。

【讨论】:

【参考方案2】:

我刚刚经历了同样的痛苦......这对我有用:

    从 mysql.com 下载/安装 64 位 MySQL 5.1.37 运行以下命令:
须藤宝石更新--系统 sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

我还卸载了我 10.5 天以来漂浮的所有 mysql gem,如果上述方法不适合你,那可能会这样做:)

【讨论】:

谢谢;你只要拯救我剩下的头发! 好东西。这让我很难过。 我想稍微扩展一下步骤#1,因为安装mysql是成功的一半。我下载了这个版本的 mysql 作为 zip 而不是 gz downloads.mysql.com/archives/mysql-5.1/mysql-5.1.44.zip 我按照这些说明进行操作。 hivelogic.com/articles/compiling-mysql-on-snow-leopard gist.github.com/178699 我用这些步骤安装 mysql 没有问题,然后从上面运行 setp #2 也没有问题。 这对我有用。是什么让我失去了所有链接,包括 ruby​​onrails.org wiki,它说不要在 OSX 上安装带有 Rails 的 64 位 mysql。谢谢! 对不起,不想听起来很愚蠢,但是您的方法是使用而不是 sudo gem install mysql 吗?有什么方法可以查明gem是否安装正确?谢谢我对 mac 和 MYSQL 很陌生,对 ruby​​ on rails 也比较陌生。【参考方案3】:

我已经离开 Rails 好几年了,我只是花了一些时间来设置我的开发环境。所以我想我会创建一个关于如何在 SnowLeopard 上安装最新版本的 Rails 3、MySQL 和 RVM 的教程,以希望为我所在位置的其他人节省一些时间。

它从 2011 年 8 月 21 日开始工作,使用 Rails 3.0.10、MySQL 5.5.15 和 RVM 1.7.2。它应该适用于未来的 Rails 3.0.x、MySQL 5.5.x 和 RVM 1.7.x 版本。

    如果尚未安装 XCode,请安装。我用的是 4.0.2。不幸的是,这已被 Apple 撤回,但可能在 Internet 上的其他地方可用。 3.2.x 版可从 Apple 免费下载,但我没有使用本教程对其进行测试,它可能也可以。

    安装rvm:

    user$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
    
    user$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
    
    user$ source .bash_profile
    

    在 rvm 中安装一个 Ruby 版本(例如 1.9.2)basic usage instructions are here。

    user$ rvm install 1.9.2
    user$ rvm use 1.9.2
    

    Create a gemset 用于步骤 2 中安装的 rvm ruby​​(x 是版本号)。

    user$ rvm gemset create rails30x
    user$ rvm 1.9.2@rails30x
    

    安装 Rails 3.0.x(x 是版本号)。

    user$  gem install rails -v 3.0.x.
    

    Download and install the MySQL 5.5.x package, the startup item, and the preferences pane。所有这 3 个都包含在 DMG 安装文件中。同时安装 MySQL WorkBench。

    找到 /usr/local/mysql-version-name/support-files(插入正确的 MySQL 目录名称)并编辑 mysql.server(具有 root 权限)。在第 46 行附近找到如下行:

    basedir=
    datadir=
    

    并将它们更改为读取(插入正确的 MySQL 目录名称):

    basedir=/usr/local/mysql-version-name
    datadir=/usr/local/mysql-version-name/data
    

    保存文件。现在可以从首选项窗格启动 MySQL。

    要使 rails 3 能够使用 mysql,请安装 mysql2 gem(请参阅下一步)。首先,您需要设置 DYLD_LIBRARY_PATH 包含 MySQL 库目录。为此,请编辑您的 ~/.bash_profile 主文件夹并包括以下内容(插入正确的 MySQL 目录名称):

    export DYLD_LIBRARY_PATH=/usr/local/mysql-version-name/lib:$DYLD_LIBRARY_PATH
    

    如果目录不包含在 DYLD_LIBRARY_PATH 中,则会出现关于找不到库的消息 将出现,服务器将中止。

    Install the mysql2 gem.(截至 2011 年 5 月,0.2.7 版是 Rails 3.0.x 的最新工作版本)。

    user$ gem install mysql2 -v 0.2.7 
    

    创建一个rails应用程序,它是对应的数据库(appname_development)。

    user$ rails new appname
    

    将此添加到应用的 Gemfile:gem 'mysql2', "0.2.7"

    将此添加到应用的 database.yml:

    development: 
      adapter: mysql2
      encoding: utf8
      reconnect: false
      database: appname_development
      pool: 5
      username: username
      password: pwd
      host: localhost
    

    启动应用程序并检查“关于您的应用程序的环境”。一切都应该正常工作。

【讨论】:

欢迎来到 Stack Overflow。很好的指南在这里。 (我稍微更新了格式。) 在某些情况下,RVM creates this problem【参考方案4】:

我是这样解决的:

    安装mysql的dmg文件后 捆绑配置 build.mysql --with-mysql-config=/usr/local/mysql/bin//mysql_config env ARCHFLAGS="-arch x86_64" 捆绑安装

【讨论】:

【参考方案5】:

这篇文章为我解决了这个问题:)

http://techliberty.blogspot.com/2009/12/dealing-with-rake-aborted-uninitialized.html

在豹之前

sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql

PPC 机器上的 Leopard:

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

Intel 机器上的 Leopard:

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

Snow Leopard(仅限英特尔):

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

【讨论】:

【参考方案6】:

Ian Selby 非常感谢你,但我不得不从 sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 前面删除 sudo

我正在安装到 gemset 并且正在使用 rvm,我认为它要求您不要使用 sudo 关键字。非常感谢。

【讨论】:

【参考方案7】:

如果您更喜欢 homebrew,而不是手动安装 MySQL。

卸载现有的 mysql gem(如果有的话):

 sudo gem uninstall mysql 

找到‘mysql_config’文件:

 find /usr -name 'mysql_config' 

重新安装mysql gem:

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

注意:/usr/local/bin/ 替换为在步骤 2 中找到的相应 mysql_config 路径。也在我的 blog 上。

【讨论】:

【参考方案8】:

如果您使用的是 bundler,您可以使用“bundle config”为 mysql 设置正确的构建参数,如下所示:

bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config

【讨论】:

是的,这可能在 bundler 1.0 中有所改变。它可能使用环境变量或其他东西......我不必用 1.0 明确设置它【参考方案9】:

如果你使用 RVM 安装 mysql gem,你需要使用下面的代码来安装它

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

这个方法在 Leopard Server 中对我有用,以上都不起作用

【讨论】:

【参考方案10】:

我将 mysql_config 程序从 $MYSQL_HOME/bin 重命名为其他名称,因此 gem 安装程序中的配置脚本无法找到它。即使我使用的是 libs 选项,gem 安装程序确实总是使用我的 mysql 安装中的编译设置,它是胖二进制文件。但是默认的 ruby​​ 安装只有 x86_64,因此 gem 的编译失败。重命名 mysql_config 程序后,以下命令运行良好并安装了 gem:

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-dir=/usr/local/mysql

【讨论】:

【参考方案11】:

我多次尝试了 archflags 技巧,但略有不同,但对我没有用。

最终的工作是切换回与雪豹一起安装的 ruby​​ 和 gem 版本。

我已经构建并安装了我自己的版本,除了这个之外,它在各个方面都对我有用。 由于其他一切似乎都运行良好,我不禁猜测 mysql 插件中有一些时髦的假设。无论如何,我所做的只是将 /usr/bin 再次切换到我的路径中。我已经在 /usr/local/ruby-1.8.7 和 /usr/local/ruby-1.9.1 中安装了 ruby​​,以便能够轻松切换。我想我会提到它,因为 archflags 解决方案似乎对很多人都有效,但不是全部。

【讨论】:

【参考方案12】:

安装 Snow leopard 后,我的配置无法正常工作。我在http://www.mamp.info 找到了 MAMP,它捆绑了 Apache、php 和 MySQL。你像应用程序一样安装它,它就可以工作。也许值得一试,而且它是免费的。

网格

【讨论】:

【参考方案13】:

我遇到了同样的问题,这对我有用。

    安装 Snow Leopard 和 64 位 MySQL DMG。

    创建 /etc/my.cnf 以指向我之前的 MySQL 数据目录(如 here 所述)并运行 sudo mysql_upgrade

    打开 IRB 并使用(通过 blog.costan.us/2009/07/rebuild-your-ruby-gems-if-you-update-to.html)重新安装我的所有 gem。`宝石列表`.each_line |line| system 'sudo gem install #line.split.first'

    卸载了我已经安装的 MySQL gem。

    使用 sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 安装 MySQL gem

这样,到目前为止一切似乎都正常。 *敲木头*

【讨论】:

这是在 MacBook Pro(一体机前)Core 2 Duo 2.4Ghz w/4Gb 或 RAM 上 你是用 64 位还是 32 位启动的?【参考方案14】:

将 mysql 重新构建为 64 位或安装 64 位版本很重要,但您还需要确保将 mysql gem 的本机部分也构建为 64 位(如果您使用的是原始英特尔之一,则不适用Core Duo mac)。

这是神奇的命令:

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

每当您在 Snow Leopard 上使用本机组件进行 gem 安装时,您都应该如上所示设置 ARCHFLAGS。

【讨论】:

我有一台原始的 Core Duo mac(第一代 Macbook),所以没有 64 位 CPU。您将如何修改此架构的命令? 对于 32 位 Macbook 或 Macbook Pro,安装常规 x86 版本的 MySQL 并使用以下命令:sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config =/usr/local/mysql/bin/mysql_config 是的,如果你有第一代 macbook,你应该在 gem 命令之前把所有这些东西都去掉。 另外,rubyonrails.org 网站现在有关于如何升级到雪豹的详细说明,通常比这个页面上的东西更好:weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard 特别是,有一个很好的脚本在升级所有原生 gem 的终点。【参考方案15】:

我为此奋斗了很长时间,终于让它在 Snow Leopard 上运行。我最终从源代码安装了 Ruby、RubyGems 和 MySQL(有关安装 Ruby 和 RubyGems 的信息,请参阅Hivelogic tutorial。MySQL 教程链接在底部)。我终于得到了要安装的 gem,但我仍然在安装

dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle
  Expected in: flat namespace

Trace/BPT trap

我终于删除了mysql.bundle(我不知道这是干什么用的),一切正常。

sudo rm -f /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle

希望对某人有所帮助。

【讨论】:

伙计,感谢 mysql.bundle 的提醒。这在我的一台机器上烧毁了我。 “我终于删除了 mysql.bundle(我不知道这是干什么用的),一切正常。”按照同样的逻辑,您可能会尝试删除那个大的“mach_kernel”文件或那些“tmp”目录。从系统中删除由 Apple 安装的东西不是一个好主意。先研究了解它存在的原因,然后再决定是否可以删除。【参考方案16】:

我按照这篇文章 (http://www.schmidp.com/2009/06/14/rubyrails-and-mysql-on-snow-leopard-10a380/) 中的说明进行操作,现在一切正常。

记得留意他安装mysql驱动的命令中的错别字。

【讨论】:

【参考方案17】:

我想我会在这里回答我自己的问题。似乎问题不在 mysql 中,而在 mysql ruby​​ 绑定中。我想通了,因为当我连接 Querius(我的 mysql gui)时,它能够连接。

这里是如何从源代码构建修复绑定:

cd /tmp
wget http://www.tmtm.org/en/ruby/mysql/ruby-mysql-0.2.6.tar.gz
tar xvfz ruby-mysql-0.2.6.tar.gz
cd ruby-mysql-0.2.6
./configure
make
sudo make install

我必须从 Snow Leopard 上的源代码构建大量库,并且它们不断涌现。 MacPorts 似乎没有对所有库进行足够的更新,所以我要自己做。接下来:freetype (http://download.savannah.gnu.org/releases-noredirect/freetype/)

【讨论】:

【参考方案18】:

我已经多次看到这个问题。 几乎 每次我在机器上构建 mysql。我认为,您必须将 mysqlconfig 作为 gem install 命令的一部分传递。

sudo gem install mysql -- --with-mysql-config=/your/mysql/config

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=/usr/bin/ruby
--with-mysql-config

请记住,您需要 mysql 开发文件才能构建此 gem。

【讨论】:

以上是关于Rails、MySQL 和雪豹的主要内容,如果未能解决你的问题,请参考以下文章

雪豹:致命错误:调用未定义函数 mysql_connect()

在雪豹上安装mysqldb

雪豹下Macports mysql5设置

NSPopover 和雪豹

Imagemagick、雪豹和 PDF 转换

雪豹和 XCode 3.1