gem install罗盘-无法构建gem本机扩展

时间:2019-01-27 02:28:51

标签: compass-sass

宝石安装指南针-无法构建宝石本机扩展,如下图所示在终端中:

johnlove% gem install compass
ERROR:  Error installing compass:
    ERROR: Failed to build gem native extension.

[基本知识]

[Macintosh:~] johnlove% which ruby
/usr/bin/ruby
[Macintosh:~] johnlove% which sass
/usr/local/bin/sass
[Macintosh:~] johnlove% which scss
/usr/local/bin/scss
[Macintosh:~] johnlove% which compass
compass: Command not found.

[更多基本知识]

[Macintosh:~] johnlove% sass -v
Sass 3.5.5 (Bleeding Edge)
[Macintosh:~] johnlove% scss -v
Sass 3.5.5 (Bleeding Edge)
[Macintosh:~] johnlove% ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
[Macintosh:~] johnlove% compass -v
compass: Command not found.

[UPDATE 2]

在终端中进行了此操作

sudo gem install -n /usr/local/bin compass

后退

current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.9.21/ext/ffi_c
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby -I /Library/Ruby/Site/2.3.0 -r ./siteconf20190130-2612-nh9d7t.rb extconf.rb
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/universal-darwin18/rbconfig.rb:215: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040757
checking for ffi.h... no
checking for ffi.h in /usr/local/include,/usr/include/ffi... no
checking for shlwapi.h... no
checking for rb_thread_blocking_region()... no
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
creating extconf.h
creating Makefile

current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.9.21/ext/ffi_c
make "DESTDIR=" clean

current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.9.21/ext/ffi_c
make "DESTDIR="
Running autoreconf for libffi
/Library/Ruby/Gems/2.3.0/gems/ffi-1.9.21/ext/ffi_c/libffi/autogen.sh: line 2: exec: autoreconf: not found
make: *** ["/Library/Ruby/Gems/2.3.0/gems/ffi-1.9.21/ext/ffi_c/libffi-universal-darwin18"/.libs/libffi_convenience.a] Error 127

make failed, exit code 2

结束[UPDATE 2]

=====

[UPDATE 1]

我了解到我的路径可能设置不正确,所以我跑了:

gem env

然后回来:

RubyGems Environment:
  - RUBYGEMS VERSION: 3.0.2
  - RUBY VERSION: 2.3.7 (2018-03-28 patchlevel 456) [universal.x86_64-darwin18]
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.3.0
  - USER INSTALLATION DIRECTORY: /Users/johnlove/.gem/ruby/2.3.0
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby
  - GIT EXECUTABLE: /usr/bin/git
  - EXECUTABLE DIRECTORY: /usr/bin
  - SPEC CACHE DIRECTORY: /Users/johnlove/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Library/Ruby/Site
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-18
  - GEM PATHS:
     - /Library/Ruby/Gems/2.3.0
     - /Users/johnlove/.gem/ruby/2.3.0
     - /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/gems/2.3.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /Library/Frameworks/Python.framework/Versions/Current/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin

如果我的路径弄乱了,我应该怎么找?

另一个谜?

sudo gem install compass

回来了吗?

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/bin directory.

我试图创建一个具有完全读写权限的本地usr / local / bin目录。

失败!

结束[UPDATE 1]

=====

出现本机扩展错误后,我紧跟着

compass -v compass: Command not found.

我下载并安装了罗盘.app,它现在出现在菜单栏中。我什至为我的一个无聊项目创建了一个指南针项目。

那么,如何在没有宝石罗盘的情况下成功安装Compass.app?

尝试过他的...

sudo gem update --system

将其退回...

Latest version already installed. Done.

然后,我尝试了此操作:

sudo apt-get install ruby-dev

知道了这一点:

apt-get: command not found

我确实是这样做的:

xcode-select --install

回来:

command line tools are already installed

我想我不能将其归咎于Xcode。

预先感谢您的救助...

2 个答案:

答案 0 :(得分:0)

macOS随Ruby(以及许多其他开放源代码工具)一起安装。但是,默认情况下,Mac不允许您随它安装任何gems,因为它并不意味着要进行修改。除了/System/Library以外,Apple在/usr//usr/local/文件夹中安装的所有内容都是macOS的一部分,并且只能由Apple管理。

强烈建议不要使用sudo安装gem,或更改系统文件和目录的权限。否则,任何建议都应视为坏建议。

该解决方案涉及两个主要步骤:

  1. 安装单独的Ruby版本,该版本不会干扰Mac随附的版本。
  2. 更新您的PATH,以使新Ruby版本的位置位于PATH中。目录列表以及计算机查找可执行程序的顺序称为PATH。如果在终端中输入echo $PATH,将看到目录列表,以冒号分隔。

有几种方法可以执行此操作。我建议并希望在诸如Compass之类的gem的安装文档中更流行的最佳方法是使用automated script,它将为您设置合适的环境。这样可以大大减少由于指令不足而导致出错的可能性,这些指令会使用户手动执行大量操作,而让他们自己去理解所有必要的步骤。

其他选择包括手动安装工具以及使用工具所需的适当~/.bash_profile和/或命令更新PATH。首先,我建议安装Homebrew,这样可以轻松安装其他工具和macOS应用程序。

然后,安装单独的Ruby版本的4种最流行的方法是:

如果您同时不需要多个版本的Ruby(macOS随附的版本除外)

  • 自制软件-安装完成后,用brew install ruby安装ruby,然后通过运行PATH,然后是echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
  • 更新source ~/.bash_profile

如果您希望在版本之间轻松切换的灵活性

  • chrubyruby-install-我的个人建议以及上述脚本自动安装的建议。这些可以与Homebrew一起安装。

  • rbenv-可以与Homebrew一起安装

  • RVM

要检查您是否正在使用非系统版本的Ruby,可以运行以下命令:

which ruby

应该不是/usr/bin/ruby

ruby -v

应该不是2.3.7。到目前为止,2.6.1是最新的Ruby版本。

答案 1 :(得分:0)

我不确定,但是在尝试安装此gem之前,您是否安装了build-essential?对于Linux用户来说这是一个常见问题

尝试在安装该gem之前先安装它,例如:

sudo apt-get install build-essential

然后安装gem

sudo gem install compass

我使用docker做了一个简单的测试,并且仅在安装时有效,例如:

无效

docker run -it bash ubuntu:16.04 bash
apt-get update
apt-get install ruby2.3 ruby2.3-dev -y
gem install compass

有效

docker run -it bash ubuntu:16.04 bash
apt-get update
apt-get install build-essential ruby2.3 ruby2.3-devel
gem install compass

为什么要构建必需品?

build-essentials软件包是编译Debian软件包所需的所有软件包的参考。它通常包括GCC / g ++编译器和库以及其他一些实用程序。查看文档:{​​{3}}