【问题标题】:Run `bundle` system command in subfolder在子文件夹中运行 `bundle` 系统命令
【发布时间】:2014-09-08 03:02:53
【问题描述】:

我试图在我的 ruby​​ 项目的子文件夹中运行 bundle,但它似乎在我的初始目录的上下文中运行,即使我已将当前工作目录更改为子文件夹。

# change directories and run bundle in a sub directory:
# ruby script.rb
system('bundle')
system('cd sub_folder')
system('bundle')

bundle 命令成功运行,但仅适用于父文件夹。通过系统命令更改目录不会正确切换捆绑程序的上下文,并且会为父文件夹 gemfile 运行两次。我错过了什么?

【问题讨论】:

    标签: ruby bundler


    【解决方案1】:

    刚刚想通了:

    Dir.chdir('sub_folder') do
      Bundler.with_clean_env do 
        system('bundle')
      end
    end
    

    Shelling out - 任何打开子 shell 的 Ruby 代码(如系统、 反引号或 %x{}) 将自动使用当前的 Bundler 环境。如果您需要使用不是 您当前捆绑包的一部分,使用 with_clean_env 方法和 堵塞。在块内创建的任何子壳都将被赋予 在激活 Bundler 之前存在的环境。例如, Homebrew 命令运行 Ruby,但不能在包中运行:

    http://bundler.io/man/bundle-exec.1.html#ENVIRONMENT-MODIFICATIONS

    【讨论】:

    • 顺便说一句,如果您只想在 with_clean_env 块内执行 system 命令,则可以改用 Bundler.clean_system('<command>')
    • 对于bundler >= 2.1,您应该改用Bundler.with_unbundled_env
    【解决方案2】:

    你可以试试:

    # ruby script.rb
    Dir.chdir('sub_folder') do
      system('bundle')
    end
    

    【讨论】:

    • 这是我尝试的第一件事,但捆绑器无法识别新的上下文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2014-08-08
    • 2021-05-27
    • 2018-11-21
    • 2021-01-29
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多