Rails 5:如何设置用于 rails app:update 的合并工具?

Pam*_*orp 17 macos ruby-on-rails mergetool app-update ruby-on-rails-5

我正在将 rails 5.2.4.1 应用程序升级到 rails 6。我想合并一些配置文件,而不是从旧文件的副本手动添加信息。

我第一次输入 m 来合并文件时,我收到以下消息。

Please specify merge tool to `THOR_MERGE` env.
Run Code Online (Sandbox Code Playgroud)

我进行了搜索并找到了这篇博文。这个人在谷歌搜索后找到的文件夹在我的 Mac 电脑上不存在。

FileMerge 不存在并且 DiffMerge 很旧。我还没有找到任何关于使用一个的信息rails app:update

目前使用哪些 Mac 合并工具,我可以将 env var THOR_MERGE 设置为?

Sim*_*ell 11

偶然发现了这个答案,正在寻找同样的事情。

您可以通过THOR_MERGE如下设置env 变量来启动 vscode diff 工具:

THOR_MERGE="code -d $1 $2"
Run Code Online (Sandbox Code Playgroud)

这是假设您的 PATH 中有代码,您可以按照此处的说明进行设置。


Dan*_*ton 8

RubyMine 也可以用作合并工具。为了使其在我的 macOS Monterey 系统上运行,我使用以下代码创建了一个新的 Bash 脚本/usr/local/bin/rubymine-merge(部分基于JetBrains Toolbox 提供的脚本):rubymine

#!/usr/bin/env bash

declare -- wait="-W"

bundle exec rubocop --server -A "$1"

open -na "$HOME/Library/Application Support/JetBrains/Toolbox/apps/RubyMine/ch-0/222.3739.56/RubyMine 2022.2 EAP.app/Contents/MacOS/rubymine" $wait --args merge "$2" "$1" "$2"

Run Code Online (Sandbox Code Playgroud)

之后,我可以调用 Rails 更新脚本,如下所示:

THOR_MERGE=rubymine-merge bin/rails app:update
Run Code Online (Sandbox Code Playgroud)

该功能自 2022 年 8 月中旬的 RubyMine 2022.2.1 起开始运行。

Rails 更新脚本似乎要求合并工具的行为就像已收到参数一样--wait,因为在上次合并后,脚本会删除所有临时文件。对于 2022.2 版本的命令行脚本来说--wait,作为命令行参数传递似乎有问题,因此我对第-W3 行进行了硬编码。

我还在第 5 行插入了对rubocop的调用,以便 Rails app:update 脚本的建议更改已经与该项目的标准保持一致。如果这部分不能满足您的需求,请跳过该部分。我必须使用bundle exec rubocop而不是bin/rubocop因为 Rails app:update 脚本并不总是在项目根目录的上下文中运行。

/usr/local/bin/rubymine将该脚本与 JetBrains Toolbox 生成的脚本分开并不是最理想的。每次安装新版本的 RubyMine 时,实际 RubyMine 应用程序的路径都会发生变化。

  • 这就是我一直在寻找的,但是每次工具箱决定更改文件夹/应用程序名称等时,脚本都需要更新。我想知道是否没有更简单的方法来查找路径... (2认同)

pdu*_*uey 5

XCode 似乎包含 /usr/bin/opendiff,它是一个启动 FileMerge.app 的二进制文件。所以我能够:THOR_MERGE=opendiff rails app:update