【问题标题】:How to fix broken dependencies for Sinatra on server如何修复服务器上 Sinatra 的损坏依赖项
【发布时间】:2020-05-07 10:38:03
【问题描述】:

我有一个使用 Ruby v2.4.3 运行的 Sinatra 项目。

使用 rbenv,我将机器上的 Ruby 版本更新为 2.6.1,并修改了项目的 Gemfile,指定了新版本。

这是更新的 Gemfile:

source "https://rubygems.org"

ruby '2.6.1'
gem 'sinatra', '1.4.6'
gem 'ralyxa'
gem 'alexa_verifier'
gem 'activesupport'
gem 'pg'
gem 'rake'
gem 'sinatra-activerecord'
gem 'openssl'

group :production do
  gem "puma"
end

现在,当我使用ruby server.rb 启动服务器时,我收到了几条错误消息:

2: from server.rb:2:in `<main>'
    1: from /Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:92:in `require'
/Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- sinatra/activerecord (LoadError)

/Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:103:in `require': dlopen(/Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pg-1.2.2/lib/pg_ext.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
  Referenced from: /usr/local/opt/postgresql/lib/libpq.5.dylib
  Reason: image not found - /Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pg-1.2.2/lib/pg_ext.bundle
/Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:103:in `require': Error loading the 'postgresql' Active Record adapter. Missing a gem it depends on? dlopen(/Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pg-1.2.2/lib/pg_ext.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
  Referenced from: /usr/local/opt/postgresql/lib/libpq.5.dylib
  Reason: image not found - /Users/vimbro/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pg-1.2.2/lib/pg_ext.bundle

我尝试降级 Ruby 版本,删除并重新安装 OpenSSL,手动更新所有 gem,但没有任何效果。

【问题讨论】:

    标签: ruby postgresql rubygems sinatra sinatra-activerecord


    【解决方案1】:

    啊哈,我最近也遇到了。这是因为随 Homebrew 分发的 OpenSSL 版本已更新到 1.1。我怀疑您的 2.6.1 gems 是以前构建的,可能是在另一个项目上,使用旧版本的 OpenSSL 因此消息

    Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)`
    

    您应该能够使用以下命令重新安装 gem:

    gem uninstall pg_ext
    

    如果您有多个版本,则应将它们全部删除然后运行:

    bundle install
    

    而且,祈祷,你应该很高兴。

    但是,我还发现对于某些 gem,这仍然不起作用,可能是因为他们指定了要使用的 OpenSSL 版本。如果问题仍然存在,您仍然可以使用旧版本的 OpenSSL。这有点过激,但在您自己的本地/开发环境中运行可能没问题 - 您已被警告。

    brew uninstall openssl
    brew uninstall openssl
    brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb
    

    是的,运行卸载两次。

    根据下面的评论,这有助于运行使用旧版本 OpenSSL 编译的旧版本 Ruby。使用较新的 Rubies,我只需重新安装它们即可获取较新版本的 OpenSSL,然后其他一切正常。也重新安装 gem。

    【讨论】:

    • 谢谢@sensadrome! 'gem uninstall pg_ext' 没有帮助 - 我收到消息“未安装 Gem 'pg_ext'”。我试过卸载'pg',但这也无济于事。有效的是安装以前版本的 openssl。我现在可以走了,但我宁愿找到一种方法来保留最新版本的 openssl。你有什么建议?
    • 好吧,我正在慢慢放弃以前版本的 openssl。我发现唯一可行的方法是使用rbenv uninstall 2.6.1 重新安装ruby,然后使用rbenv install 2.6.1。就我而言,我需要以前的版本,因为我在 2.2.9 上运行一个站点(我知道,我知道!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2010-12-15
    • 2019-08-15
    • 2014-04-26
    相关资源
    最近更新 更多