【问题标题】:Deploy a Ruby gem local without using git or internet access在不使用 git 或 Internet 访问的情况下在本地部署 Ruby gem
【发布时间】:2016-06-03 23:13:47
【问题描述】:

有没有办法在不访问互联网的情况下分发 Ruby gem,只需捆绑安装在开发人员电脑上的 gem?

这是为了在我们的组织内部部署,对互联网的访问受到严格限制。所有电脑都运行 Windows7 和 Ruby1.9.3 和 Bundler 1.11.2

我对 git 或 bundler 几乎没有经验。 不使用 Rails,但使用了一些其他的 gem,例如 activerecord 和 logger。

我尝试了什么: 我用我的 rb 创建了一个文件夹。脚本和带有所需 gem 的 .gemspec 文件,然后我执行了bundle gem name_of_the_gem_i_want_to_make,但收到了错误Errno::ENOENT: No such file or directory - git config user.name。 过去我创建了一个 git 帐户并做了一些实验,但我不想使用它。

过去我尝试使用 jRuby 和 Warble 来生成 JAR,但在这种情况下,我想坚持使用 MRI Ruby。

我的开发电脑上有互联网连接,但我想部署脚本的一些电脑或服务器 - 更重要的是它们所依赖的 gem - 没有。 不过,Ruby 已经随处安装了。

我想要一种简单的方法来从我的开发电脑收集所有需要的文件并将这些文件传输到目标电脑。 我可以压缩我的 Ruby 文件夹并将其解压缩到其他地方,但是我有很多我不需要的文件。

你能给我我需要使用的命令或给我一个解释如何做到这一点的网站吗?我在网上阅读了很多关于捆绑器的信息,但没有找到这种工作方式。 无法想象其他开发者没有同样的问题,并且存在一个通用的解决方案。

编辑:

我通过执行gem build mygem.gemspec 设法创建了一个gem,但它只有我自己的脚本,不需要gem。

编辑:听从米海的建议,删除了之前的尝试。

创建了一个子文件夹 vendor/gems 并在那里复制了 2 个 gemfile。

现在我可以使用以下 Gemfile 执行 bundle packagebundle install --no-deployment

gem 'active_record', '4.1.1', :path => 'vendor/gems'
gem 'logger', '1.2.8', :path => 'vendor/gems'

现在的问题:如何将它部署到另一台电脑上?复制文件夹中的所有内容并在目标 PC 上执行 bundle install --local ?或者有没有办法将所有东西捆绑在一个 gem 中,以便在目标电脑上我可以做 gem install mygem --local ? gem build mygem 不包含捆绑包中的任何内容。

【问题讨论】:

    标签: ruby git deployment bundler


    【解决方案1】:

    您可以通过两种方式做到这一点。

    a) 缓存 (package) 项目的 vendor/cache 文件夹中的 gem

    bundle package
    

    这将生成/更新 Gemfile.lock 并将所有 gem 复制到本地项目的 vendor/cache 文件夹中。然后你可以将你的项目文件复制到你的服务器并运行

    bundle install --local # translates to pick my gems from vendor/cache
    

    b) 使用自定义路径,通常位于您的项目之外

    bundle install 支持本地路径

    gem install --local path_to_my_gem/my_gem.gem
    

    --local 标志是可选的,但在这种情况下它很有用,因为它跳过了在通常的远程存储库中的查找。

    随后您也可以在 Gemfile 中指定路径

    gem "my_gem", path: "path_to_my_gem/my_gem.gem"
    

    【讨论】:

    • 谢谢 Mihai,我正在接近解决方案,但没有退出,你能阅读我的编辑并建议下一步做什么吗?
    • 如果你打包 gems,你不应该改变 Gemfile 的路径。 bundle install --local 会自动从vendor/cache 中挑选它们。
    • 捆绑包终于成功了,现在是最后一部分,请参阅编辑
    • bundle package 会将所有 gem 放入项目的 vendor/cache 文件夹中。所以你必须把它复制到你的服务器上并在上面执行bundle install --local
    【解决方案2】:

    Mihai 的解决方案与本地 gem 文件夹和 --no-deployment 选项相结合在某种程度上有效,但存在一些问题: - 在目标电脑上,您需要先使用本地复制的 gem 执行 gem install bundler,然后使用您之前制作和复制的包的 bundle install --local - 对于宝石 ruby​​-oci8 和 activerecord-oracle_enhanced-adapter,我对其他宝石的解决方案由于某种原因无法正常工作(与 mingw32 平台有关)

    由于有关创建和随后安装软件包的工作以及仍然存在的问题,我决定 - 暂时 - 采用良好的旧批处理方法并制作以下​​批处理脚本。

    这只是 Windows - 显然 - 但我认为这很容易成为其他操作系统的适配器。

    gem 是从本地副本安装的,不需要互联网连接,还有 activerecord 的依赖项,不需要指定它们但 gems 需要存在。

    devkit 对于 i18n 和 json gems 是必需的,它们都是 activerecord 的依赖项。

    这里是我需要的 gemfile 的列表,这取决于您在开发电脑上使用的版本。

    activemodel-4.1.1.gem
    activerecord-4.1.1.gem
    activerecord-oracle_enhanced-adapter-1.5.6.gem
    activesupport-4.1.1.gem
    arel-5.0.1.20140414130214.gem
    builder-3.1.4.gem
    bundler-1.11.2.gem
    i18n-0.7.0.gem
    json-1.8.2.gem
    logger-1.2.8.gem
    minitest-5.3.4.gem
    ruby-oci8-2.1.2-x86-mingw32.gem
    thread_safe-0.3.4.gem
    tzinfo-1.2.2.gem
    

    您可以在C:\Rubyxxx\lib\ruby\gems\1.9.1\cache 下找到它们

    这里是批次

    @ECHO OFF
    rem in case started as administrator in folder \windows\system32
    pushd "%~dp0"
    
    rem check if ruby is installed, if not, start installation
    if not exist c:\ruby193 (
      echo Install Ruby 1.9.3 to c:\ruby193
      start /w \\myshare\ruby\rubyinstaller-1.9.3-p551.exe
    )
    
    rem check if devkit is installed, if not, copy folder local
    if not exist c:\devkit (
      echo Copying devkit..
      md c:\devkit
      xcopy /s \\myshare\devkit c:\devkit
    )
    
    echo Adding the DevKit to PATH
    set path=c:\devkit\bin;c:\devkit\mingw\bin;%PATH%
    rem gems is a folder containing all the gemfiles needed
    cd gems
    call gem install logger-1.2.8.gem --no-rdoc --no-ri --local
    call gem install activerecord-4.1.1.gem --no-rdoc --no-ri --local
    call gem install ruby-oci8-2.1.2-x86-mingw32.gem --no-rdoc --no-ri --local
    call gem install activerecord-oracle_enhanced-adapter-1.5.6.gem --no-rdoc --no-ri --local
    cd ..
    

    我希望有人发布捆绑器方法(或更好)的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多