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
运行以下命令:
我还卸载了我 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 也没有问题。 这对我有用。是什么让我失去了所有链接,包括 rubyonrails.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 和雪豹的主要内容,如果未能解决你的问题,请参考以下文章