【问题标题】:Return to readline version 6.x in Homebrew to fix Postgresql?返回 Homebrew 中的 readline 版本 6.x 以修复 Postgresql?
【发布时间】:2017-02-10 21:22:44
【问题描述】:

我不是 Homebrew 专家,但我认为它在 9/15/16 之后的某个时间将我从 readline 6.x 版“升级”到了 7.0:

eat@eric-macbook:Homebrew$ brew info readline
readline: stable 7.0 (bottled) [keg-only]
Library for command-line editing
https://tiswww.case.edu/php/chet/readline/rltop.html
/usr/local/Cellar/readline/7.0 (45 files, 2M)

这让我的 9.4.5 Homebrew 版本的 Postgresql 很头疼(出于可比性的原因,我需要旧的 9.4):

eat@eric-macbook:~$ psql --version
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /usr/local/Cellar/postgresql/9.4.5/bin/psql
  Reason: image not found
Trace/BPT trap: 5

不幸的是,我在 Homebrew 上找不到 6.x 版本的 readline 来恢复 - 似乎只有 7.0 可用(?)。

我的问题有两个:

  • readline 版本不匹配是导致我的 postgres/psql 问题的原因吗?
  • 如果是这样,我如何使用 Homebrew 返回到 6.x 来纠正问题?

提前谢谢你!

【问题讨论】:

    标签: postgresql homebrew readline


    【解决方案1】:

    只需重新安装postgresql94 包,PostgreSQL 9.4 将使用新的readline 包:

    brew reinstall postgresql94
    

    【讨论】:

    • 这有点复杂,因为 PostgreSQL 已经从 9.4.5 升级到 9.4.9 - 但是是的,重新安装 PostgreSQL 包使用 readline 7.0。谢谢。
    • 这并不能回答问题
    • 看起来 Postgres 9.5.4_1 解决了这个问题。只需运行brew upgrade postgresql
    【解决方案2】:

    回答具体问题。

    您可以在本地仍然存在的已安装 brew 软件包的版本之间切换,如以下问题所述: Homebrew install specific version of formula?

    要降级到 readline 6.x,以下命令对我有用:

    brew switch readline 6.3.8
    

    【讨论】:

    • 谢谢,但我熟悉brew switch。如上面的brew info readline 输出所示,我本地没有 v 6.x。我在 Homebrew (brew search readline) 上找不到可供下载的版本。具体问题是:如果您的机器上不再存在,如何获取它?
    【解决方案3】:

    注意:由于分支中的更改,此答案可能已过时(据 Andrew 报告,提交消失)

    致那些仍然面临这个问题但无法从自制软件包下载 readline 6.3.8 的人。你可以试试这个解决方案。 (参考here

    # Uninstall this incompatible version
    brew uninstall readline
    
    # Go to the local clone of homebrew-core
    cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core
    
    # Move to the homebrew-core revision that had 6.3.8
    git checkout 35fed817726f61a9d40c8420582f6fde59eb5f14
    
    # Re-install readline
    brew reinstall readline
    
    # Switch back to HEAD
    git checkout master
    
    # Pin readline so this can't happen again
    brew pin readline
    

    【讨论】:

    • 这似乎不再起作用,因为提交参考。不再有效。不知道为什么,但它也不在历史上。
    • 非常感谢!!这在 MacOS Sierra 上对我有用(而且我不再有 6.3.8)。我正在运行 postgres 9.4.9。我从链接复制了命令。工作顺利。
    【解决方案4】:

    我能够用毯子 brew upgrade 克服这个问题(升级所有 brew 管理的软件包)。

    【讨论】:

      【解决方案5】:

      对于遇到此问题的 Rails 用户,您只需添加 readline gem 并运行 bundle install

      gem 'rb-readline' #Fixed readline error
      

      【讨论】:

      • 如果其他人有同样的问题,为了更好的搜索索引:将 readline 从 7.0.0 升级到 8.0.0 为我触发了这个,我收到了错误 Bundler::GemRequireError: There was an error while trying to load the gem 'pry-byebug'. Gem Load Error is: uninitialized constant Byebug::LocalInterface::Readline。如果您在此问题上使用 pry 而不是 irb,请确保还全局添加 gem rb-readline
      【解决方案6】:

      如果你会使用 Sam Kah Chiin 的解决方案,你可以忽略 404。

      应用额外的更改,使其适用于新的 macOS:

      diff --git a/Formula/readline.rb b/Formula/readline.rb
      index 08d3728..d67e5e4 100644
      --- a/Formula/readline.rb
      +++ b/Formula/readline.rb
      @@ -16,7 +16,7 @@ class Readline < Formula
           sha256 "c129333634dd00ab2267ae9c531fca1f5cc50dd519ed3399918289fdfdf2663b" => :lion
         end
      
      -  keg_only :shadowed_by_osx, <<-EOS.undent
      +  keg_only :shadowed_by_macos, <<~EOS
           OS X provides the BSD libedit library, which shadows libreadline.
           In order to prevent conflicts when programs look for libreadline we are
           defaulting this GNU Readline installation to keg-only.
      

      最后做sudo update_dyld_shared_cache

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多