首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将rubygem从一个安装复制到另一个安装

如何将rubygem从一个安装复制到另一个安装
EN

Stack Overflow用户
提问于 2019-06-17 18:13:04
回答 2查看 228关注 0票数 0

在不使用gem命令的情况下,将已安装的gem从一个安装复制到另一个安装时,必须执行什么操作?

我必须在没有互联网连接的服务器上安装SQLite3。通常,我可以使用gem-file的副本:

代码语言:javascript
代码运行次数:0
运行
复制
gem install --local sqlite3-1.4.0.gem --platform ruby

但对于SQLite3来说,它需要连接到互联网才能获得编译一些二进制文件的库。该安装在一台有互联网连接的计算机上运行良好。

所以我的想法是让我在相同的操作系统和相同的Ruby版本上成功安装,并复制所有相关的组件,但这并不起作用。

当我打电话的时候:

代码语言:javascript
代码运行次数:0
运行
复制
require 'sequel'
db = Sequel.sqlite

我得到了这个错误:

代码语言:javascript
代码运行次数:0
运行
复制
LoadError: The specified module could not be found
d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.1/lib/sqlite3/sqlite3_native.so 
(Sequel::AdapterNotFound)

在跟踪中是:

代码语言:javascript
代码运行次数:0
运行
复制
d:/bin/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': LoadError: 126: The specified module could not be found.   - d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.1/lib/sqlite3/sqlite3_native.so (Sequel::AdapterNotFound)
  from d:/bin/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.1/lib/sqlite3.rb:6:in `rescue in <top (required)>'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.1/lib/sqlite3.rb:2:in `<top (required)>'
  from d:/bin/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
  from d:/bin/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
  from d:/bin/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.17.0/lib/sequel/adapters/sqlite.rb:3:in `<top (required)>'
  from d:/bin/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
  from d:/bin/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.17.0/lib/sequel/database/connecting.rb:88:in `load_adapter'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.17.0/lib/sequel/database/connecting.rb:17:in `adapter_class'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.17.0/lib/sequel/database/connecting.rb:45:in `connect'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.17.0/lib/sequel/core.rb:121:in `connect'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.17.0/lib/sequel/core.rb:399:in `adapter_method'
  from d:/bin/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.17.0/lib/sequel/core.rb:406:in `block (2 levels) in def_adapter_method'
  from _ruby_version.rb:21:in `<main>'

但是文件是存在的:

我的错误是什么?

我使用的是Windows Server 2016。

我在GitHub issue中找到了一个适合我的precompiled version of SQLite3,但我想使用较新的版本。

EN

回答 2

Stack Overflow用户

发布于 2019-06-17 18:52:50

为此,请使用Bundler

简而言之:

在你正在using.

  • Maintain的每台机器上运行gem install bundler,当你的Gemfile改变时,列出所有的bundle installbundle update来更新到最新的版本。这将生成Gemfile.lock文件。
  • 使用bundle exec作为拼音执行的前缀,例如bundle exec ruby myscript或ruby

这是一个简短的总结,但请阅读有关Bundler的更多信息。它是现代Ruby部署中必不可少的一部分。

票数 1
EN

Stack Overflow用户

发布于 2019-06-17 19:16:15

您需要使用bundler的package选项。

首先,您需要使用以下命令将依赖项缓存到vendor/cache中:

代码语言:javascript
代码运行次数:0
运行
复制
bundle package --all --all-platforms

这将在本地安装Gemfile的所有依赖项,然后将目录添加到源代码存储库。

部署时,请确保使用bundle install --local来使用本地版本。

有关详细信息,请参阅bundle packagedocumentation

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56629180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档