【问题标题】:Rails: looking for wrong sources in gemfile. how to fix?Rails:在 gemfile 中寻找错误的来源。怎么修?
【发布时间】:2023-04-05 20:06:01
【问题描述】:

新手提醒...

为了解决我的 rails webrick 服务器的问题(即启动它),我使用了旧的 Stackoverflow 答案 old answer 并执行了以下命令

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

但是,我忘记更改版本号。比如我的mysql是0.3.6(相对于命令中的0.2.6),也是libmysqlclient.18而不是.16。

现在当我尝试启动 Rails 服务器时,它说

Could not find gem 'mysql2 (~> 0.2.6)' in any of the gem sources listed in your Gemfile.

我试图用更新的版本重新运行这个命令,但它没有改变任何东西......事实上,它甚至没有询问我的 root 密码......有什么想法可以解决这个问题吗?

更新——这是我在gem list 时产生的宝石列表。第一个回答这个问题的人(在他的 cmets 中)建议我卸载 mysql .0.2.6 但从未安装过该 gem。当我执行上述name_tool 命令时,它告诉系统查找mysql 0.2.6,而我应该告诉它查找mysql2-0.3.6。

abstract (1.0.0)
actionmailer (3.0.9, 3.0.7)
actionpack (3.0.9, 3.0.7)
activemodel (3.0.9, 3.0.7)
activerecord (3.0.9, 3.0.7)
activeresource (3.0.9, 3.0.7)
activesupport (3.0.9, 3.0.7)
arel (2.0.10)
builder (2.1.2)
bundler (1.0.14)
erubis (2.6.6)
i18n (0.5.0)
mail (2.2.19)
mime-types (1.16)
mysql2 (0.3.6)
polyglot (0.3.1)
rack (1.2.3)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.9, 3.0.7)
railties (3.0.9, 3.0.7)
rake (0.9.1)
rdoc (3.8)
rubygems-update (1.8.5)
thor (0.14.6)
treetop (1.4.9)
tzinfo (0.3.27)

更新 -- 按照 Eric Hu 的回答中的说明,当我从我的项目文件夹中运行 rails server 时得到了这个结果

2011-07-26 01:49:17 rails s
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.11/lib/mysql2.rb:9
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:68:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:68:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:66:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:66:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:55:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:55:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler.rb:120:in `require'
    from /Users/michaelmitchell/Sites/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.9/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6

更新——我按照 Eric 在评论中的建议做了捆绑列表

Gems included by the bundle:
  * abstract (1.0.0)
  * actionmailer (3.0.9)
  * actionpack (3.0.9)
  * activemodel (3.0.9)
  * activerecord (3.0.9)
  * activeresource (3.0.9)
  * activesupport (3.0.9)
  * arel (2.0.10)
  * builder (2.1.2)
  * bundler (1.0.14)
  * erubis (2.6.6)
  * i18n (0.5.0)
  * mail (2.2.19)
  * mime-types (1.16)
  * mysql2 (0.2.11)
  * polyglot (0.3.1)
  * rack (1.2.3)
  * rack-mount (0.6.14)
  * rack-test (0.5.7)
  * rails (3.0.9)
  * railties (3.0.9)
  * rake (0.9.2)
  * rdoc (3.8)
  * thor (0.14.6)
  * treetop (1.4.9)
  * tzinfo (0.3.29)

【问题讨论】:

  • 我相信@robert_rouse 的意思是让您卸载您拥有的 mysql2 gem。运行gem uninstall mysql2
  • 好吧,我卸载了 mysql2 然后重新安装了它,我遇到了同样的问题。它仍在寻找 mysql2(0.2.6),即使安装了 mysql2 0.3.6 “在 Gemfile 中列出的任何 gem 源中都找不到 gem 'mysql2 (~> 0.2.6)'。”
  • 你是用 gem install mysql2 安装的吗?您应该使用 bundle install (从项目文件夹的根目录)安装 Rails 项目 gem,在 Gemfile 中指定它们之后
  • 我想我刚刚做了 gem install mysql2 ...我是新手,对不起。我不明白你的其余评论

标签: ruby-on-rails rubygems terminal webrick


【解决方案1】:

我相信您对使用 bundler 和 RubyGems 感到困惑。当您gem install <gemname> 时,您正在使用 RubyGems 命令安装最新版本的<gemname>

Rails 项目附带一个名为 bundler 的 gem,它也管理 gem。 Bundler 为您为其创建 Gemfile 的每个 Rails 项目构建单独的 gem 副本。如果您不记得制作 Gemfile,那是因为它是 rails new <projectname> 将为您生成的文件之一。

很可能,您还没有运行bundle install。在此之前,请转到当前 Rails 项目的文件夹并打开 Gemfile,这样您就知道发生了什么。我敢打赌里面有这样一行:gem 'mysql2', '~> 0.2.6'

要安装正确的版本,请在命令行中转到您的项目文件夹。输入bundle install。稍等片刻,就可以了——再次尝试运行rails s

如果这看起来令人困惑和不必要,请记住,当有人更新 gem 时,他们可能会以会破坏您的程序的方式对其进行更改。 Bundler 为您提供服务,确保您的程序运行所需的特定版本的 gem(在这种情况下,mysql2-0.2.6 而不是 mysql2-0.3.6)。

【讨论】:

  • 我去了我的文件夹并做了 Gemfile 并没有结果。然后我做了捆绑安装,它安装了一些东西,但是当我运行“rails server”后,它在我的 OP 的最新更新中给了我错误消息
  • 通过打开Gemfile,我的意思是编辑它,只是为了看看它。请用bundle list 更新您的原始帖子好吗?如果您将其粘贴为评论,它将被 StackOverflow 格式破坏
  • 好的,我做了捆绑列表并将结果粘贴到 OP 中。
  • 显然这是 MySQL 和 Rails 的常见问题——我只使用过 PostgreSQL(和默认的 sqlite),所以我没有遇到过这个问题。但是,this is a great blog post 解释了您收到错误的原因以及您应该做什么。这是一个简短的阅读,我强烈建议通读它。它解释了您之前看到的install_name_tool 方法以及为什么这是一个不太理想的解决方案
  • 抱歉耽搁了,我正在旅行。
【解决方案2】:

清除该 gem 并重新安装它。

或者,用于 MySQL 安装的 RVM + Mac Homebrew 可以创造奇迹。

【讨论】:

  • 谢谢,我该如何“清理掉那颗宝石”。我是新手...只是“uninstall_name_tool”吗?
  • 卸载 gem 并确保 /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6 已消失。
  • 恕我直言,我认为您没有理解问题所在。 gem mysql2-0.2.6 不存在。当我执行 OP 中描述的 name_tool 时,它告诉系统寻找 mysql2-0.2.6 但它不存在所以我无法卸载它。有关当前安装的 gem 的列表,请参阅我更新的 OP...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多