我想在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。
答案 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 install
或bundle 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::CONFIG
或MKDIR_P
。
有时候,您只需要快速修改即可修复工具的路径。这在很多情况下都可以使用,但是当基本操作系统发生很大变化时,有时可能会导致问题。在这种情况下,请使用下面的完整“清理并重新安装”方法。
使用RVM查找当前的MAKEDIRS
文件:
rbconfig.rb
编辑文件并修复 find ~/.rvm/rubies/$(rvm current | cut -d@ -f1) -iname 'rbconfig.rb'
对象上的MKDIR_P
和MAKEDIRS
键:
RbConfig::CONFIG
保存文件,然后重试 # 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。
重新安装红宝石
RbConfig::CONFIG
重试您的 # -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