JHHK

欢迎来到我的个人网站
行者常至 为者常成

Ruby调试

目录

Gem介绍

在 Ruby 中,gem install、bundle install 和 bundle exec 是与 RubyGems 和 Bundler 相关的三个不同的命令,用于管理和安装 Ruby 项目的依赖项。以下是它们的简要说明:

bunlder 是一个管理项目的管理工具,bundle是bundler的助手

一、gem install:

用于安装 RubyGems 中的 gem 包(库)。

示例:gem install gem_name

这个命令用于全局安装 gem,使其在系统中的任何地方和任何项目中都可用。

gem install debase

三方库的全局安装的目录:
/Users/lxy/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems

可以使用gem info debug查看安装三方库的信息

二、bundle install:

用于安装项目中指定版本的 gem 包,这些版本信息通常在项目的 Gemfile 文件中指定。

示例:在项目根目录执行 bundle install

这是一种更好的做法,特别是当您在一个项目中工作时。

这种方法有助于确保项目的依赖性是明确定义的,并且与其他项目独立。每个项目都可以有自己的 Gemfile.lock 文件,其中包含确切的 gem 版本,以确保每个项目都使用相同的依赖项版本。

在大多数情况下,推荐使用 Bundler(bundle install)来管理项目的依赖性,因为它提供了更好的隔离和版本控制。

可以在工程目录下使用命令查看安装的三方库

# 查看所有三方库
bundle list --paths

# 查看所有三方库
bundle show --paths

# 查看某一个三方库
bundle show debug --paths

要想安装到项目目录中可以使用

bundle install --path vendor/bundle

三、bundle exec:

bundle exec 的作用是在当前环境中运行指定命令,同时确保该命令使用了项目中指定的 Gem 包版本。

这是为了避免与系统中已经安装的 Gems 版本发生冲突,确保项目在不同环境中的一致性。

使用 bundle exec 的一种常见场景是在运行项目中的 Ruby 脚本或命令行工具时。例如:

bundle exec ruby my_script.rb

上述命令会使用项目中 Gemfile.lock 文件中指定的 Gem 版本来运行 my_script.rb,而不会受到系统全局 Gem 版本的影响。

总体而言,bundle exec 的使用有助于确保项目的 Gem 包版本一致性,提高项目的可维护性和可重复性。

这个命令会查找 Gemfile 中指定的 gem 版本,并将其添加到 $LOAD_PATH 中,以确保在执行脚本时使用正确的 gem 版本。

四、ChatGpt关于Gem和bundler的解释

使用场景对比

场景 gem 用 Bundler
安装一个 gem gem install gem_name bundle add gem_name
更新 gems gem update bundle update
管理项目依赖 手动记录依赖,不方便 使用 Gemfile 明确定义依赖
版本冲突处理 手动管理版本 自动锁定版本,确保环境一致

总结

gem 是基础工具,用于全局安装和管理 gems。
Bundler 是项目级工具,用于管理特定项目的 gem 依赖及其版本一致性。
在实际开发中,Bundler 通常是默认的选择,因为它能更好地管理项目依赖,而 gem 则更适合全局工具或简单脚本的场景。

调试环境配置

一、老的方式

下面这种调试方式在我的电脑上已经不能使用了,安装debase报错,并且没有找到解决的办法

ruby教程之VSCode 运行调试ruby

二、新的方式

参考文章:
CocoaPods - 源码调试环境搭建
VSCode rdbg Ruby Debugger

调试需要依赖的库改为debug,修改后重新执行 bundle install 命令安装依赖

gemfile文件

# frozen_string_literal: true

source 'https://rubygems.org'
gem 'debug'

目录结构

launch.json文件

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "rdbg",
            "name": "Debug",
            "request": "launch",
            "script": "${workspaceFolder}/CocoaPods-master/bin/pod",
            "cwd": "${workspaceFolder}",
            // "useBundler": true,
            "debugPort": "1235",
            "args": [
                "install",
                "--project-directory=./LGApp"
            ],
            "env": {
                "PATH": "/Users/lxy/.rbenv/shims:/opt/flutter/bin:/usr/local/lxybin:/Library/Frameworks/Python.framework/Versions/3.11/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/go/bin:/Library/Apple/usr/bin:/Users/lxy/Library/Android/sdk/tools:/Users/lxy/Library/Android/sdk/platform-tools:/usr/local/go/bin",
                "GEM_HOME": "",
                "GEM_PATH": "",
                "RUBY_VERSION": ""
            }
        }
    ]
}

调试器类型改为rdbg,program改为script

${workspaceFolder} 是一个变量,代表当前打开的工作区的根目录

 "cwd": "${workspaceFolder}",
 cwd 设置了程序的当前工作目录,即在启动程序时,程序将会以这个目录作为其工作目录
 如果不设置 cwd,默认情况下,将以 launch.json 文件所在的目录作为当前工作目录。
 这可能会导致程序无法找到预期的文件或配置,因为它们是相对于项目根目录的。
 通常情况下,将 cwd 设置为 ${workspaceFolder} 是一个比较安全的选择,以确保调试器在正确的上下文中启动。

# 默认端口是1234,应当给每个工程都配置独立的端口,防止端口冲突
 "debuggerPort":"1235"

# 同时在gemfile中指定 gem ruby-debug-ide
# 保证工程中使用自己的ruby-debug-ide,而不是使用全局的ruby-debug-ide
"useBundler": true,

# 配置项用于设置在启动调试时传递给正在运行的程序的环境变量。这可以用于在调试会受到环境变量影响的应用程序时,提供特定的环境设置。
# 通过使用 env 配置项,你可以在调试时设置各种环境变量,以模拟不同的运行时条件,或者配置应用程序的行为。这对于需要在不同环境中运行的应用程序(例如开发环境、测试环境、生产环境)或者依赖于特定环境变量的应用程序非常有用。
env {}

# 可以在终端中使用下面的命令获取自己系统的环境变量
printf "\n\"env\": {\n \"PATH\": \"$PATH\",\n \"GEM_HOME\": \"$GEM_HOME\",\n \"GEM_PATH\": \"$GEM_PATH\",\n \"RUBY_VERSION\": \"$RUBY_VERSION\"\n}\n\n"

vscode安装插件
在vscode中安装VSCode rdbg Ruby Debugger扩展

solargraph配置

solargraph是一种语言服务器,为Ruby提供智能感知,代码完成和内联文档

一、安装solargraph

gem install solargraph

# 如果上边安装报错的话,先执行下边命令,然后再安装
brew install coreutils

二、vscode配置

1、在vscode下载Ruby Solargraph插件

2、在vscode的setting中设置

在终端中

which solargraph
/usr/local/bin/solargraph

在设置中搜索 solargraph,并配置Command Path

3、建议配置

先卸载现有的用homebrew 安装的 ruby

使用rbenv来下载ruby

新的ruby安装完成后,pod 和 jekyll 命令会失效,因为他们依赖ruby但是在之前的路径已经找不到ruby了,因为已经卸载了

重新将pod 和 jekyll 安装到原来的目录下

# 重新安装 cocoapods
sudo gem install -n /usr/local/bin cocoapods

# 重新安装 jekyll 和 bundler
sudo gem install -n /usr/local/bin jekyll bundler 

这样配置完成之后vscode卸载Ruby Solargraph后再重新安装,就可以直接使用solargraph了,不用再去vscode的setting中设置


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.