Rails,MySQL和Snow Leopard


68

我使用在WWDC上获得的光盘升级到了雪豹。

现在尝试运行我的一些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呢?如果是这样,您的设置是什么,更好的是,我该怎么做才能重现它?

Answers:


107

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

  1. 从mysql.com下载/安装64位MySQL 5.1.37
  2. 运行以下命令:
    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 gem,如果上述方法对您不起作用,则可以这样做:)


谢谢; 你只剩下我的头发!
Matt Darby

好东西。那让我很沮丧。
nickmjones

我想在步骤#1上稍微扩展一下,因为安装mysql成功了一半。我以zip的形式下载了该版本的mysql, 而不是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也没有问题。
jspooner 2010年

这对我有用。是什么让我摆脱了所有链接,包括rubyonrails.org Wiki,该链接说不要在OSX上用Rails安装64位mysql。谢谢!
凯尔·赫罗尼穆斯

抱歉,不想听起来很蠢,但是是使用您的方法而不是sudo gem安装mysql吗?有什么方法可以确定宝石是否正确安装?谢谢,我对Mac和MYSQL还是很陌生,对ruby on rails还是比较陌生。
密苏里州

10

将mysql重建为64bit或安装64bit版本很重要,但是您还需要确保将mysql gem的本机部分也重建为64bit(如果您使用的是原始的Intel 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
Martijn Heemels,2009年

是的,如果您拥有第一代Macbook,则应该在gem命令之前忽略所有这些内容。
Shebanator 2009年

另外,rubyonrails.org网站上现在还提供了有关如何升级到雪豹的详细说明,通常比此页面上的要好: weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard 在特别是,最后有一个不错的脚本可用于升级所有本地gem。
Shebanator

7

如果使用捆绑程序,则可以使用“ bundle config”为mysql设置适当的构建参数,如下所示:

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

是的,这可能在捆绑程序1.0中已更改。它可能使用环境变量之类的东西……我不必将其显式设置为1.0
Steven Soroka,2010年

6

我为此奋斗了很长时间,终于让它在Snow Leopard上运行。我最终从源代码安装了Ruby,RubyGems和MySQL(有关安装Ruby和RubyGems的信息,请参见Hivelogic教程。MySQL教程位于底部)。我终于可以安装宝石了,但是我仍然在

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

希望能对某人有所帮助。


1
伙计,感谢您对mysql.bundle的注意。那烧死了我一台机器。
斯科特,

1
“我终于删除了mysql.bundle(我不知道这是做什么用的),并且一切正常。” 按照相同的逻辑,您可以尝试删除那个大的“ mach_kernel”文件或那些“ tmp”目录。从Apple安装的系统中删除内容不是一个好主意。请先研究一下为什么要删除它,然后再决定是否可以删除它。
Tin Man'1

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。


2

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

网状


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/



1

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

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

  2. 创建/etc/my.cnf中以点我以前的MySQL数据目录(如描述在这里),然后运行

    sudo mysql_upgrade

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

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

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

  5. 安装了MySQL gem

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

到目前为止,一切似乎都可以进行。*敲木*


这是在配备4Gb或RAM的MacBook Pro(一体机)Core 2 Duo 2.4Ghz上

您是以64位还是32位启动的?
贾里尔

1

如果您更喜欢自制啤酒,而不是手动安装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/mysql_config在步骤2中找到的相应路径。同样在我的博客上


1

伊恩·塞尔比(Ian Selby)非常感谢您,但我不得不sudosudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

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


1

我已经这样解决了:

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

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撤回,但可以在Internet上的其他位置使用。可以从Apple免费下载3.2.x版,但是我没有在本教程中对其进行测试,它可能也可以使用。

  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中安装Ruby版本(例如1.9.2),基本用法说明在此处

    user$ rvm install 1.9.2
    user$ rvm use 1.9.2
    
  4. 为在步骤2中安装的rvm ruby创建一个宝石集(x是版本号)。

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

    user$  gem install rails -v 3.0.x.
    
  6. 下载并安装MySQL 5.5.x软件包,启动项和首选项窗格。所有这三个都包含在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中未包含目录,则会出现一条有关未找到该库的消息,并且服务器将中止。

  7. 安装mysql2宝石。(截至2011年5月,0.2.7版是Rails 3.0.x的最新工作版本)。

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

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

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

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


欢迎使用堆栈溢出。不错的指南。(我对格式进行了一些更新。)
PaŭloEbermann,2011年

在某些情况下,RVM会产生此问题
New Alexandria

1

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

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

到我的bash个人资料,这对我来说解决了。


0

我尝试了几次带有细微变化的archflag技巧,但是对我没有用。

什么终于做了工作切换回与雪豹安装红宝石版和宝石。

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


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

0

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

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

此方法在Leopard Server中对我有效,以上方法均无效


0

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

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

  • 在豹之前

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

    • PPC机器上的豹子:

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

    • 英特尔机器上的豹:

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

    • 雪豹(仅在Intel上):

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.