Ruby RubyGems: почему я всегда получаю сообщения об ошибках при попытке установить гемы?

5

Поэтому я всегда, кажется, получаю сообщения об ошибках при установке новых драгоценных камней. Я новичок в Ruby, Rails и RubyGems, так что это очень расстраивает. Я не уверен, нужно ли мне что-то настраивать или я что-то неправильно установил ... Надеюсь, вы поможете. Вот несколько примеров проблем, с которыми я сталкиваюсь:

# 1: sudo против использования sudo

В тоннах учебников / документации они всегда используют:

gem install gem-name

Для меня это почти всегда приводит к некоторой ошибке ... пока я не сделаю ...

sudo gem install gem-name

... тогда драгоценный камень обычно устанавливается нормально. Как получается, что люди могут бегать, gem installне начиная с sudo?

Решение:

Установите Ruby Version Manager!

Шутки в сторону! Я хотел бы сделать это раньше. Ruby Version Manager позволяет запускать несколько версий Ruby, каждая из которых имеет собственный набор гемов, и переключаться между различными версиями, по-видимому, просто. Кроме того, вам больше не придется использовать sudo. Кроме того, его очень легко установить, так что вы должны это сделать!


# 2: «Не могу найти заголовочные файлы»

Иногда я получаю сообщение, как это, даже когда работает под sudo...

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h

Что это вообще значит?

Решение:

Проблема в том, что он не может найти команду make. Он устанавливается автоматически при установке XCode. И по какой-то причине, хотя у меня был установлен XCode, он не смог его найти. Я скачал последнюю версию XCode и переустановил. Теперь при запуске which makeкорректно возвращается /usr/bin/make.

Используя Lion с новой версией XCode, загрузите «Инструменты командной строки для XCode» с https://developer.apple.com/downloads .


№ 3: «Небезопасный мир, доступный для записи»

Вот новый.

/Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/source.rb:352: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777

Это не выглядит хорошо. Что мне нужно сделать, чтобы это исправить?

Решение:

Что-то, что я установил, в какой-то момент времени изменило разрешения для моего /usr/local/binкаталога (а также моего /usr/localи /usr/local/mysqlкаталогов). Чтобы изменить их обратно:

sudo chmod 755 /usr/local/bin

# 4: Не могу установить bcrypt-ruby

Наконец, я пытаюсь запустить bundle installсвое новое приложение Rails 3.0.0.beta4 и получаю эту ошибку:

Installing bcrypt-ruby (2.1.2) from .gem files at /Users/andrew/.bundle/ruby/1.8/cache with native extensions /Library/Ruby/Site/1.8/rubygems/installer.rb:483:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Users/andrew/.bundle/ruby/1.8/gems/bcrypt-ruby-2.1.2 for inspection.
Results logged to /Users/andrew/.bundle/ruby/1.8/gems/bcrypt-ruby-2.1.2/ext/mri/gem_make.out
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `each'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `build_extensions'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:198:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/source.rb:170:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/installer.rb:34:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/installer.rb:21:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/installer.rb:6:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/cli.rb:91:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/task.rb:33:in `send'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/task.rb:33:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/invocation.rb:109:in `invoke'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/invocation.rb:116:in `call'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/invocation.rb:116:in `invoke'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor.rb:137:in `start'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/base.rb:378:in `start'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor.rb:124:in `start'
    from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/bin/bundle:13
    from /usr/bin/bundle:19:in `load'
    from /usr/bin/bundle:19

Похоже, bcrypt-rubyэто какая-то зависимость, которую он пытается установить. Так как мне заставить это работать? Как я могу узнать причину, по которой он терпит неудачу?

Решение:

Это было исправлено переустановкой XCode.


Извините за список белья, но я очень хочу избавиться от всех этих проблем!

Заранее спасибо!

Андрей
источник

Ответы:

2

Это было бы лучше как отдельные вопросы, так как я могу ответить только на некоторые.

  1. sudo- В OS X гемы устанавливаются в каталог под /Library. Все, что находится здесь, является общим для всех пользователей на Mac, и поэтому для записи на него вам необходим root-доступ, что дает вам sudo.
    Вы видите команды без sudo, когда либо люди объясняют вещи быстро, поскольку они ожидают, что люди будут знать, когда использовать sudo, или если у них есть установочный ruby ​​для установки в пользовательский каталог согласно документации Ruby

  2. и 4 .: Не удается найти заголовочные файлы для ruby.
    Я подозреваю, что вы не установили XCode, инструменты разработчика Apple. Они находятся на вашем OS X DVD или могут быть загружены из Apple или App Store, если вы используете OS X Lion.

  3. /usr/local/bin- это плохо.
    Запустите /Applications/Utilities/Disk Utility.app, выберите загрузочный диск и почините разрешения.

отметка
источник
1
запущенная Дисковая утилита не исправила это сообщение о разрешениях = \
Эндрю
У меня уже установлен XCode, поэтому я не знаю, почему это может быть проблемой
Эндрю
для 2 и 4 - я не так часто использую ruby ​​(и если я это сделал, я использую macports), но отмечу, что путь к ruby.h - это /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Ruby. framework / Версии / 1.8 / usr / lib / ruby ​​/ 1.8 / universal-darwin10.0 / ruby.h - вы установили другой ruby?
Марк
Re su do chdo 755 / usr / local / bin
Отметить
Re: 2 & 4, я переустанавливал XCode, и это, похоже, решило проблему
Эндрю
2

Я предлагаю установить Ruby Version Manger , и вам не нужно беспокоиться о проблемах sudo, и вы можете легко переключаться между различными версиями ruby ​​и наборами гемов.

ghoppe
источник
Если бы я знал, насколько просто это было установить, я бы сделал это раньше. Я люблю RVM !!!
Андрей
@ Андрей Сладкий! Рад, что смог помочь. RVM значительно облегчил мне разработку ruby ​​/ rails.
Ghoppe
1

Ре № 4:

Если вам не хватает XCode и у вас есть учетная запись Apple Developers, вы также можете установить только инструменты командной строки (около 180 МБ) - загрузка доступна на сайте ADC .

uncrase
источник
0

Причина ошибки разрешения заключается в том, что вы не вошли в систему как пользователь root на терминале.

Если у вас уже есть root, включите на вашем компьютере Mac тип терминала (без символа $)

$ su

Если у вас нет пользователя root, вам нужно включить его, выполнив следующие действия

  1. В меню Apple выберите «Системные настройки».
  2. В меню «Вид» выберите «Пользователи и группы».
  3. Нажмите на замок и войдите в систему под учетной записью администратора.
  4. Нажмите Параметры входа….
  5. Нажмите кнопку «Изменить…» или «Присоединиться…» в правом нижнем углу.
  6. Нажмите кнопку «Открыть каталог».
  7. Нажмите на замок в окне утилиты каталогов.
  8. Введите имя учетной записи администратора и пароль, затем нажмите OK.
  9. Выберите Enable Root User в меню Edit.
  10. Введите пароль пользователя root, который вы хотите использовать, в поля «Пароль» и «Проверка», затем нажмите «ОК».

Более того же на http://support.apple.com/kb/ht1528

По крайней мере, это работает для меня после того, как я застрял на пару часов.

Мухаммед Ариф
источник