在 Ubuntu 20.04 上安装 tiny_tds gem 失败
Installing tiny_tds gem on Ubuntu 20.04 fails
我想在 Ubuntu 20.04 上安装 tiny_tds,所以我这样做了
apt install freetds-dev
并安装 gem
gem install tiny_tds
在 Ubuntu 18.04 上非常有效,但 20.04 失败了。输出的最后一行是:
current directory: /home/myuser/.rvm/gems/ruby-2.7.0/gems/tiny_tds-2.1.2/ext/tiny_tds
make "DESTDIR=" install
make: /usr/bin/mkdir: Command not found
make: *** [Makefile:202: .sitearchdir.-.tiny_tds.time] Error 127
make install failed, exit code 2
关于如何解决这个问题有什么想法吗?
我有 Ubuntu 20.04,RVM Ruby 2.7 活跃。
我在 Ubuntu 20.04 上安装 gems 时遇到了类似的问题。使用 RVM 和 Ruby 2.7。
如前所述,make 进程找不到 mkdir
命令。
$ which mkdir
/bin/mkdir
由于进程正在搜索 /usr/bin/mkdir
中的命令,因此找不到。我可以通过为正确的路径创建一个符号 link 来解决这个问题:
sudo ln -s /bin/mkdir /usr/bin/mkdir
问题
此问题可能是由于升级您的基础 OS 引起的,这可能会更改 mkdir
等不同工具的默认路径。通常,大多数遵循 PATH
to search for an executable. However, when you're installing gems using Ruby & RVM, there is a lot going on behind the scenes for . Traditionally many Unix, Linux & BSD (*nix) C / C++ projects will follow the standard ./configure && make && make install
pattern. The ./configure
script generally detect details about the system at build-time, then auto-generate a Makefile
catered to that particular system. On GNU systems, the autotools
维护者工具的 shell 也用于自动生成 POSIX 兼容的 ./configure
脚本,以及 Makefile.in
可以使用的模板 ./configure
生成最终的 Makefile
.
当 gem install
或 bundle install
需要为某些东西编译原生 C / C++ 扩展时,它还会生成一个 Makefile
以及系统特定的详细信息。在此示例中,发现 mkdir
实用程序应位于 /usr/bin/mkdir
.
作为此过程的一部分,mkmkf
gem 会自动生成一个 Makefile
,通常来自 extconf.rb
脚本,其配置与您的系统相匹配,来自 RbConfig::CONFIG
。但是,在这种情况下,mkdir
实用程序实际上位于 /bin/mkdir
。因此,RbConfig::CONFIG
设置现在对您的系统不正确。这可能是因为您升级到 Ubuntu 20.04,但是安装了旧的红宝石 ~/.rvm
已经为旧的 OS 版本进行了预配置。
所以,这是由于 RbConfig::CONFIG
键不正确造成的。在这种情况下:MKDIR_P
或 MAKEDIRS
.
解决方案(快速破解方法)
有时您只需要快速破解即可修复工具的路径。这在很多情况下都可行,但有时当您的基础 OS 发生很大变化时可能会导致问题。在这种情况下,请使用下面的完整清理和重新安装方法。
使用 RVM 查找当前 rbconfig.rb
文件:
find ~/.rvm/rubies/$(rvm current | cut -d@ -f1) -iname 'rbconfig.rb'
编辑文件并修复 RbConfig::CONFIG
对象上的 MKDIR_P
和 MAKEDIRS
键:
# Your path may be different. Use the one you found from Step #1
$EDITOR ~/.rvm/rubies/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/rbconfig.rb
# Now change the lines:
CONFIG["MAKEDIRS"] = "/usr/bin/mkdir -p"
CONFIG["MKDIR_P"] = "/usr/bin/mkdir -p"
# To:
CONFIG["MAKEDIRS"] = "/bin/mkdir -p"
CONFIG["MKDIR_P"] = "/bin/mkdir -p"
保存文件并重试您的 gem install
命令:
gem install tiny_tds
解决方案(完全清理重新安装方法)
通常,不建议手动编辑 rbconfig.rb
,因为它是在编译 Ruby 本身时从 ./configure
脚本生成的。有很多 RbConfig::CONFIG
键和值,这意味着有很多可能出错的地方。例如:如果某些核心系统库更改了位置或版本,您可能 运行 会遇到与链接那些旧基础 OS 库相关的问题。在这种情况下,最好只重新安装一个 ruby 针对你的 OS.
编译的
重新安装 ruby
# -j $(nproc) is optional... but can speed up your build by using multiple CPU cores.
# If you don't have the 'nproc' tool, just pass the number of CPU cores to `-j`
rvm reinstall --disable-binary $(rvm current | cut -d@ -f1) -j $(nproc)
重试您的 gem install
命令:
gem install tiny_tds
我想在 Ubuntu 20.04 上安装 tiny_tds,所以我这样做了
apt install freetds-dev
并安装 gem
gem install tiny_tds
在 Ubuntu 18.04 上非常有效,但 20.04 失败了。输出的最后一行是:
current directory: /home/myuser/.rvm/gems/ruby-2.7.0/gems/tiny_tds-2.1.2/ext/tiny_tds
make "DESTDIR=" install
make: /usr/bin/mkdir: Command not found
make: *** [Makefile:202: .sitearchdir.-.tiny_tds.time] Error 127
make install failed, exit code 2
关于如何解决这个问题有什么想法吗? 我有 Ubuntu 20.04,RVM Ruby 2.7 活跃。
我在 Ubuntu 20.04 上安装 gems 时遇到了类似的问题。使用 RVM 和 Ruby 2.7。
如前所述,make 进程找不到 mkdir
命令。
$ which mkdir
/bin/mkdir
由于进程正在搜索 /usr/bin/mkdir
中的命令,因此找不到。我可以通过为正确的路径创建一个符号 link 来解决这个问题:
sudo ln -s /bin/mkdir /usr/bin/mkdir
问题
此问题可能是由于升级您的基础 OS 引起的,这可能会更改 mkdir
等不同工具的默认路径。通常,大多数遵循 PATH
to search for an executable. However, when you're installing gems using Ruby & RVM, there is a lot going on behind the scenes for ./configure && make && make install
pattern. The ./configure
script generally detect details about the system at build-time, then auto-generate a Makefile
catered to that particular system. On GNU systems, the autotools
维护者工具的 shell 也用于自动生成 POSIX 兼容的 ./configure
脚本,以及 Makefile.in
可以使用的模板 ./configure
生成最终的 Makefile
.
当 gem install
或 bundle install
需要为某些东西编译原生 C / C++ 扩展时,它还会生成一个 Makefile
以及系统特定的详细信息。在此示例中,发现 mkdir
实用程序应位于 /usr/bin/mkdir
.
作为此过程的一部分,mkmkf
gem 会自动生成一个 Makefile
,通常来自 extconf.rb
脚本,其配置与您的系统相匹配,来自 RbConfig::CONFIG
。但是,在这种情况下,mkdir
实用程序实际上位于 /bin/mkdir
。因此,RbConfig::CONFIG
设置现在对您的系统不正确。这可能是因为您升级到 Ubuntu 20.04,但是安装了旧的红宝石 ~/.rvm
已经为旧的 OS 版本进行了预配置。
所以,这是由于 RbConfig::CONFIG
键不正确造成的。在这种情况下:MKDIR_P
或 MAKEDIRS
.
解决方案(快速破解方法)
有时您只需要快速破解即可修复工具的路径。这在很多情况下都可行,但有时当您的基础 OS 发生很大变化时可能会导致问题。在这种情况下,请使用下面的完整清理和重新安装方法。
使用 RVM 查找当前
rbconfig.rb
文件:find ~/.rvm/rubies/$(rvm current | cut -d@ -f1) -iname 'rbconfig.rb'
编辑文件并修复
RbConfig::CONFIG
对象上的MKDIR_P
和MAKEDIRS
键:# Your path may be different. Use the one you found from Step #1 $EDITOR ~/.rvm/rubies/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/rbconfig.rb # Now change the lines: CONFIG["MAKEDIRS"] = "/usr/bin/mkdir -p" CONFIG["MKDIR_P"] = "/usr/bin/mkdir -p" # To: CONFIG["MAKEDIRS"] = "/bin/mkdir -p" CONFIG["MKDIR_P"] = "/bin/mkdir -p"
保存文件并重试您的
gem install
命令:gem install tiny_tds
解决方案(完全清理重新安装方法)
通常,不建议手动编辑 rbconfig.rb
,因为它是在编译 Ruby 本身时从 ./configure
脚本生成的。有很多 RbConfig::CONFIG
键和值,这意味着有很多可能出错的地方。例如:如果某些核心系统库更改了位置或版本,您可能 运行 会遇到与链接那些旧基础 OS 库相关的问题。在这种情况下,最好只重新安装一个 ruby 针对你的 OS.
重新安装 ruby
# -j $(nproc) is optional... but can speed up your build by using multiple CPU cores. # If you don't have the 'nproc' tool, just pass the number of CPU cores to `-j` rvm reinstall --disable-binary $(rvm current | cut -d@ -f1) -j $(nproc)
重试您的
gem install
命令:gem install tiny_tds