如何将gem安装到本地路径然后需要它

时间:2016-06-26 15:30:15

标签: ruby rubygems

我想将rubygems.org中的gem设置为我的项目的某个子文件夹,如"/gems",然后通过require从脚本中使用它。请帮我解决。

3 个答案:

答案 0 :(得分:0)

首选方法是使用标准方案:使用二进制文件构建gem,将其打包并在使用时根据gemspec自行下载所有依赖项。如果出于某种原因上述情况不适合您,其中一个选项是:

•为脚本创建gem;

•您指定path where to install dependencies

bundle install --path=vendor/gems

•在您的脚本中使用require代替require_relative,因为在目标计算机上没有本地捆绑包的配置文件,指向正确的文件夹;

•当您的脚本完成后,您可以打包所有内容,包括宝石。

答案 1 :(得分:0)

进入ruby项目的正常方法是设置Gemfile并使用bundler (see link for more info)来处理项目所需的gem,而不必考虑它们存储的位置

但是,如果真的无法运送自己的gem目录,例如因为您的生产系统绝对无法访问互联网,您可以这样做:

  • 在项目的根目录中创建一个目录(例如'gems')。
  • 将gems下载并解压缩到该目录(或使用gem install的相应选项将安装重定向到该目录中)
  • 使用以下常量在项目的根目录中创建ruby文件:

    PROJECT_DIR = __dir__
    GEMS_DIR = File.join(PROJECT_DIR, 'gems')
    
  • 现在您可以要求您的宝石链接require File.join(GEMS_DIR, <gem_name>)

尽管如此,如果可能的话,你应该考虑使用bundler。

编辑:通过gem install

安装gem
  1. 从项目的gems目录
  2. 中删除PG数据
  3. 卸载全球宝石gem uninstall pg
  4. 再次安装pg,但是进入项目目录:gem install -i <path_to_projects_gems_dir> pg
  5. 使用指向上述宝石的需求再次运行脚本

答案 2 :(得分:0)

我解决了这个问题:

  

gem install -i ./ pg

ROOT = File.expand_path('..', __FILE__)
ENV['GEM_PATH'] = File.join(ROOT, './')

require 'pg'
puts 'Version of libpg: ' + PG.library_version.to_s