目录
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报错,并且没有找到解决的办法
二、新的方式
参考文章:
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中设置
行者常至,为者常成!