在Ubuntu 20.04上安装tiny_tds gem失败

时间:2020-05-19 19:55:19

标签: ruby-on-rails tiny-tds ubuntu-20.04

我想在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,具有Ruby 2.7的RVM。

2 个答案:

答案 0 :(得分:8)

我在Ubuntu 20.04上安装gems时遇到类似的问题。使用RVM和Ruby 2.7。 如前所述,make进程找不到mkdir命令。

$ which mkdir
/bin/mkdir

由于进程正在/usr/bin/mkdir中搜索命令,因此找不到该命令。我可以通过创建指向正确路径的符号链接来解决此问题:

sudo ln -s /bin/mkdir /usr/bin/mkdir

答案 1 :(得分:2)

问题

此问题可能是由升级基本操作系统引起的,这可能会更改诸如mkdir之类的不同工具的默认路径。通常,大多数外壳程序都遵循PATH搜索可执行文件。但是,当您使用Ruby&RVM安装gem时,compiling "native extensions"的幕后工作很多。传统上,许多Unix,Linux和BSD(* nix)C / C ++项目将遵循标准的./configure && make && make install模式。 ./configure脚本通常在构建时检测有关系统的详细信息,然后自动生成适合该特定系统的Makefile。在GNU系统上,autotools维护工具还用于自动生成POSIX兼容的./configure脚本和Makefile.in可以由./configure用来生成最终版本的模板。 Makefile

gem installbundle install需要为某些内容编译本机C / C ++扩展时,它还会生成一个具有系统特定详细信息的Makefile。在此示例中,发现mkdir实用程序应该位于/usr/bin/mkdir上。

作为此过程的一部分,mkmkf gem通常从Makefile自动生成extconf.rb的{​​{1}}脚本,该脚本通常具有与您的系统匹配的配置。但是,在这种情况下,RbConfig::CONFIG实用程序实际上位于mkdir处。因此,/bin/mkdir设置对于您的系统而言现在不正确。发生这种情况可能是因为您升级到Ubuntu 20.04,但是已经为旧OS版本预先配置了已安装到RbConfig::CONFIG的旧红宝石。

因此,这是由错误的~/.rvm键引起的。在这种情况下:RbConfig::CONFIGMKDIR_P

解决方案(快速破解方法)

有时候,您只需要快速修改即可修复工具的路径。这在很多情况下都可以使用,但是当基本操作系统发生很大变化时,有时可能会导致问题。在这种情况下,请使用下面的完整“清理并重新安装”方法。

  1. 使用RVM查找当前的MAKEDIRS文件:

    rbconfig.rb
  2. 编辑文件并修复 find ~/.rvm/rubies/$(rvm current | cut -d@ -f1) -iname 'rbconfig.rb' 对象上的MKDIR_PMAKEDIRS键:

    RbConfig::CONFIG
  3. 保存文件,然后重试 # 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 ,因为它是在编译Ruby本身时从rbconfig.rb脚本生成的。 ./configure键和值有很多,这意味着可能会出错。例如:如果某些核心系统库更改了位置或版本,则可能会遇到与那些旧的基本OS库进行链接有关的问题。在这种情况下,最好只是重新安装针对您的基本操作系统编译的Ruby。

  1. 重新安装红宝石

    RbConfig::CONFIG
  2. 重试您的 # -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