【问题标题】:Install Ruby Gem + dependencies on specific folder and run that installation在特定文件夹上安装 Ruby Gem + 依赖项并运行该安装
【发布时间】:2019-12-26 14:49:22
【问题描述】:

我目前正在尝试在特定目录上安装一组 gem 文件并运行该安装(试图避免安装到默认的 Ruby 位置)。

例如我有一个包含我计划在本地安装的 gem 的文件夹,因此我运行以下命令:

gem install --force --install-dir .\install_3 --conservative --bindir .\install_3\bin --no-document --local *.gem

这会在我的 install_3 目录中安装该文件夹中的所有可用 gem。 但是,我无法运行安装在该目录中的 gem。

我的问题是,如何在特定文件夹中安装 Ruby gem 并确保从 --install-dir 选项中指定的文件夹运行 gem 及其依赖项?

当我尝试使用以下脚本运行时:

@setlocal
@set DIRNAME=%~dp0
cd %DIRNAME%

@set PATH=%PATH%;%DIRNAME%install_3\bin
@set TEMP=C:\TEMP

fluentd -c fluentd.conf

我收到以下错误:

Traceback (most recent call last):
        2: from C:/Users/yytcadm/Desktop/fluentd_1.8.0_gems/install_3/bin/fluentd:23:in `<main>'
        1: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems.rb:303:in `activate_bin_path'
C:/Ruby25-x64/lib/ruby/2.5.0/rubygems.rb:284:in `find_spec_for_exe': can't find gem fluentd (>= 0.a) with executable fluentd (Gem::GemNotFoundException)

它不会从我指定的安装文件夹中获取 gem,而是尝试在默认的 ruby​​ gem 文件夹中搜索它们。

编辑:我的 fluentd 文件似乎在这一行上抛出错误:

load Gem.activate_bin_path('fluentd', 'fluentd', version)

我猜我需要将其修改为我的 --install-dir 选项决定的自定义路径,但到目前为止我的尝试还没有取得成果。

【问题讨论】:

    标签: ruby-on-rails ruby rubygems fluentd


    【解决方案1】:

    当您需要 gem 时,Rubygems 会在默认的 gems 文件夹中搜索它。您可以通过将 gem 的路径添加到 $LOAD_PATH 变量来防止 Rubygems 这样做。

    例如,如果您在 /home/user/custom_dir/my_gem 有一个 gem,您可以在需要 gem 之前执行以下操作:

    $LOAD_PATH << "/home/user/custom_dir/my_gem/lib"
    

    另一种选择是使用require_relative 而不是require。如果您的应用程序根目录是 /home/user/my_app 并且在该目录中您有 /home/user/my_app/gems 之类的 gem,您可以执行以下操作:

    require_relative 'gems/my_gem'
    

    查看这个谈话https://www.youtube.com/watch?v=I0a5zv7uBHw 它对如何要求东西真的很有启发性。

    【讨论】:

      【解决方案2】:

      为可能需要的人提供答案:

      为了正确地自动安装特定的 gem 及其依赖项:

      bundle install
      bundle package --all-platforms --all
      

      这将获取所有依赖的 gem 并将它们放在供应商/缓存中

      如果您使用以下命令安装 gem + 依赖项:

      gem install --no-user-install --install-dir Install_Location --conservative --bindir Install_Location\bin --no-document --local YOUR_GEM_TO_INSTALL
      

      然后您可以通过设置以下内容来运行您的 gem 命令:

      1. 将 Install_Location/bin 添加到 PATH
      2. 将 Install_Location 附加到 GEM_HOME
      3. 将 Install_Location 附加到 GEM_PATH
      4. 运行所需的 gem 命令

      这使我能够运行 gem 命令,而无需这些出现/影响 gem 列表中可用的 gem。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 1970-01-01
        相关资源
        最近更新 更多