Rails,MySQL和Snow Leopard

时间:2009-06-13 22:54:00

标签: mysql ruby-on-rails ruby osx-snow-leopard

我使用我们在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呢?如果是这样,你的设置是什么,更好的是,我该怎么做才能重现它?

18 个答案:

答案 0 :(得分:108)

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

  1. 从mysql.com下载/安装64位MySQL 5.1.37
  2. 运行以下命令:
  3. 
        sudo gem update --system
    
        sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
    

    我还卸载了10.5天内浮动的所有mysql宝石,如果以上内容对你不起作用,可以这样做:)

答案 1 :(得分:10)

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

这是神奇的命令:

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

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:6)

我和他一起战斗了很长时间,终于让它在Snow Leopard上工作了。我最终从源代码安装了Ruby,RubyGems和MySQL(参见Hivelogic tutorial安装Ruby和RubyGems .MQ教程在底部链接)。我终于安装了宝石,但我还是得到了

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

希望能有所帮助。

答案 4 :(得分:4)

我多次见过这个问题。每次我在机器上构建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 dev文件才能构建此gem。

答案 5 :(得分:2)

我在安装雪豹后让我的配置工作有问题。我在http://www.mamp.info找到了MAMP,它捆绑了Apache,PHP和MySQL。你像应用程序一样安装它,它只是工作。也许值得一试,它是免费的。

答案 6 :(得分:1)

我以为我会在这里回答我自己的问题。似乎问题不在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/

答案 7 :(得分:1)

从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版本。

  1. 安装XCode(如果尚未安装)。我用4.0.2。不幸的是,Apple现在已经撤回了这一消息,但可能会在互联网上的其他地方提供。版本3.2.x可以从Apple免费下载,但我没有用本教程测试它,它可能也有效。

  2. 安装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
    
  3. 在rvm basic usage instructions are here中安装Ruby版本(例如1.9.2)。

    user$ rvm install 1.9.2
    user$ rvm use 1.9.2
    
  4. 对于步骤2中安装的rvm ruby​​,
  5. Create a gemset(x是版本号)。

    user$ rvm gemset create rails30x
    user$ rvm 1.9.2@rails30x
    
  6. 安装Rails 3.0.x(x是版本号)。

    user$  gem install rails -v 3.0.x.
    
  7. Download and install the MySQL 5.5.x package, the startup item, and the preferences pane。所有这三个都包含在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中包含该目录,则会显示有关未找到库的消息 会出现,服务器会中止。

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

    user$ gem install mysql2 -v 0.2.7 
    
  9. 创建一个rails应用程序,它是相应的数据库(appname_development)。

    user$ rails new appname
    
  10. 将此添加到应用的Gemfile:gem 'mysql2', "0.2.7"

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

    development: 
      adapter: mysql2
      encoding: utf8
      reconnect: false
      database: appname_development
      pool: 5
      username: username
      password: pwd
      host: localhost
    
  12. 启动应用并查看“关于您的应用环境”。一切都应该正常工作。

答案 8 :(得分:1)

我已经这样解决了:

  1. 安装mysql的dmg文件后
  2. bundle config build.mysql --with-mysql-config = / usr / local / mysql / bin // mysql_config
  3. env ARCHFLAGS =“ - arch x86_64”
  4. 捆绑安装

答案 9 :(得分:1)

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

我正在安装到gemset并使用rvm,我想你不要使用sudo关键字。非常感谢。

答案 10 :(得分:1)

如果你更喜欢回家brew,而不是手动安装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上。

答案 11 :(得分:1)

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

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

到我的bash档案,这解决了我。

答案 12 :(得分:1)

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

  1. 安装Snow Leopard和64位MySQL DMG。

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

    sudo mysql_upgrade

  3. 打开IRB并使用(通过blog.costan.us/2009/07/rebuild-your-ruby-gems-if-you-update-to.html)重新安装我的所有宝石。

    ``gem list`.each_line {| line |系统'sudo gem install#{line.split.first}'}

  4. 卸载了我安装的MySQL gem。

  5. 安装了具有正式sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
  6. 的MySQL gem

    有了这个,到目前为止一切似乎都在发挥作用。 *敲木头*

答案 13 :(得分:1)

我继续像这篇文章(http://www.schmidp.com/2009/06/14/rubyrails-and-mysql-on-snow-leopard-10a380/)中解释的那样,现在一切正常。

请记住在他的命令中查找拼写错误以安装mysql驱动程序。

答案 14 :(得分:0)

如果要使用RVM安装mysql gem,则需要使用以下代码进行安装

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

这个方法在Leopard Server中对我有用,上面没有一个工作

答案 15 :(得分:0)

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

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

  • 在Leopard之前

    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

    • 英特尔机器上的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

答案 16 :(得分:0)

我将$ MYSQL_HOME / bin中的mysql_config程序重命名为其他内容,以便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

答案 17 :(得分:0)

我曾经尝试过几次略有变化的拱形技巧,但它从来没有对我有效。

最终做了的工作是切换回用雪豹安装的ruby和gem的版本。

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