Подтвердить что ты не робот

"Не удалось создать родное расширение gem" в Windows 7 (система не может найти указанный путь)

Короче говоря, проблема

Я нахожусь в Windows и получаю следующую ошибку при запуске gem install json —platform=ruby:

The system cannot find the path specified.
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
    ERROR: Failed to build gem native extension.

    C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Предыстория и некоторые исследования

Итак, во-первых, я не человек Windows, поэтому для меня это смелый новый мир. Унаследовав ноутбук от работы, у которого была выпущена сумасшедшая коллекция библиотек, мне удалось удалить все предыдущие установки ruby ​​и Devkit, а затем установить следующее:

  • Ruby 1.9.3p484 с Ruby Installer в C:/Ruby193
  • Ruby 2.0.0p353 с Ruby Installer в C:/Ruby200
  • Devkit DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe (для ruby ​​1x), извлеченный в C:/Ruby193-devkit
  • Devkit DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe (32-бит для ruby ​​2x), извлеченный в C:/Ruby200-devkit-x32.

Затем я установил Pik 0.2.8 в качестве драгоценного камня и запустил pik_install в новый каталог C:/bin в соответствии с инструкциями по установке.

Моя PATH выглядит так:

PATH=C:\bin;C:\Ruby193\bin;C:\windows;C:\windows\system32;C:\windows\system32\Wbem;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Java\jdk1.6.0_33\bin;C:\Program Files (x86)\Common Files\Apple\Mobile Device Support\;C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseSVN\bin;C:/inpath;C:\Program Files (x86)\WinMerge;C:\ChromeDriver;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64

Важным моментом является то, что C:/bin и C:/Ruby193/bin находятся на пути. Это означает, что ruby ​​1.9.3 загружается по умолчанию при запуске оболочки, и я могу успешно переключиться на 2.0.0 с помощью pik use 2.0.0p353. Другими словами, pik отлично работает.

Devkit предназначен, чтобы разрешить компиляцию собственных двоичных файлов C/С++ из драгоценных камней в Windows, чтобы avio использовала предварительно скомпилированные двоичные файлы Windows.

Поскольку у меня установлены две версии ruby, и для каждого из них требуется другой devkit (один для 2x и один для 1x), мне пришлось дважды выполнить настройку devkit:

cd C:/Ruby193-devkit
ruby dk.rb init
# Edit config.yml to remove all but Ruby193
ruby dk.rb install

cd C:/Ruby200-devkit
ruby dk.rb init
# Edit config.yml to remove all but C:/Ruby200
ruby dk.rb install

В этот момент я должен был успешно запустить gem install json —platform=ruby, но получил ошибку выше. После небольшого копания я обнаружил это, в котором говорится, что COMSPEC установлен корректно и удаляет любые ключи AutoRun из HKEY_CURRENT_USER\Software\Microsoft\Command Processor - у меня был один из ANSIcon и должным образом удалил его.

К сожалению, я все еще не смог установить json gem.

Тогда мне показалось, что, возможно, неправильная версия GCC используется или не найдена. Две версии Devkit поставляются с различными версиями gcc:

> C:\Ruby193-devkit\mingw\bin\gcc —version
gcc (tdm-1) 4.5.2

> C:\Ruby200-devkit-x32\mingw\bin\gcc —version
gcc (rubenv-4.7.2-release) 4.7.2

Затем я задавался вопросом, не загрузила ли pik версию devtools (и, следовательно, gcc) для конкретной версии ruby, которую я выбрал, и всегда использовал 1.9.3. Благодаря этой статье кажется, что это не так:

> pik use 193
> where ruby
C:\Ruby193\bin\ruby.exe

> cat C:\Ruby193\lib\ruby\site_ruby\devkit.rb
# enable RubyInstaller DevKit usage as a vendorable helper library
unless ENV['PATH'].include?('C:\\Ruby193-devkit\\mingw\\bin') then
  puts 'Temporarily enhancing PATH to include DevKit...'
  ENV['PATH'] = 'C:\\Ruby193-devkit\\bin;C:\\Ruby193-devkit\\mingw\\bin;' + ENV['PATH']
end
ENV['RI_DEVKIT'] = 'C:\\Ruby193-devkit'
ENV['CC'] = 'gcc'
ENV['CXX'] = 'g++'
ENV['CPP'] = 'cpp'


> pik use 200
> where ruby
C:\Ruby200\bin\ruby.exe

> cat C:\Ruby200\lib\ruby\site_ruby\devkit.rb
# enable RubyInstaller DevKit usage as a vendorable helper library
unless ENV['PATH'].include?('C:\\Ruby200-devkit-x32\\mingw\\bin') then
  phrase = 'Temporarily enhancing PATH to include DevKit...'
  if defined?(Gem)
    Gem.ui.say(phrase) if Gem.configuration.verbose
  else
    puts phrase
  end
  puts "Prepending ENV['PATH'] to include DevKit..." if $DEBUG
  ENV['PATH'] = 'C:\\Ruby200-devkit-x32\\bin;C:\\Ruby200-devkit-x32\\mingw\\bin;' + ENV['PATH']
end
ENV['RI_DEVKIT'] = 'C:\\Ruby200-devkit-x32'
ENV['CC'] = 'gcc'
ENV['CXX'] = 'g++'
ENV['CPP'] = 'cpp'

(На самом деле у меня нет кота в окнах, но это дает более четкое объяснение)

Как вы можете видеть, похоже, что правильная версия devkit добавляется в путь devkit.rb, который, очевидно, загружается, потому что моя ошибка содержит "Временное повышение PATH для включения DevKit...".

Вернуться к исходной ошибке

Это было:

The system cannot find the path specified.
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
    ERROR: Failed to build gem native extension.

    C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

К сожалению, журнал результатов не дает особого содействия. Вот что выглядит gem_make.out:

C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile

Я подумал, что extconf.rb может оказать некоторую помощь, но я не могу сделать голову и хвост:

require 'mkmf'

unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
  $CFLAGS << ' -O3'
end
if CONFIG['CC'] =~ /gcc/
  $CFLAGS << ' -Wall'
  unless $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
    $CFLAGS << ' -O0 -ggdb'
  end
end

$defs << "-DJSON_GENERATOR"
create_makefile 'json/ext/generator'

Файл Makefile в C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator выглядит следующим образом. Мне кажется странным, что этот Makefile даже создается.

Если кто-нибудь, у кого больше опыта Windows/Ruby, может пролить свет на это, это будет потрясающе!

PS. Я нахожусь в Windows 7 Professional SP1

Обновление после нескольких копаний

Итак, я хотел проверить, что devkit вызывающе улучшает путь с помощью правильных каталогов devkit. Благодаря предложению из другого вопроса SO, я переместил установки devkit внутри каталогов Ruby:

Теперь tdm devkit живет в C:\Ruby193\devkit, а mingw64 - C:\Ruby200\devkit. Запустив ruby dk.rb install -f для каждого devkit, я открыл оба файла devkit.rb, чтобы проверить правильность обновления пути. У них было, и я обновил puts, чтобы он напечатал: "Временное повышение PATH включает DevKit для 1.9" или "Временное повышение PATH включает DevKit для 2". В качестве подтверждения того, что загружается правильный devkit:

C:\>pik 193

C:\>ruby -rdevkit -ve "puts ENV['PATH']"
ruby 1.9.3p484 (2013-11-22) [i386-mingw32]
Temporarily enhancing PATH to include DevKit for 1.9...
C:\Ruby193\devkit\bin;C:\Ruby193\devkit\mingw\bin;C:\bin;C:\Ruby193\bin;C:\windows;C:\windows\system32;C:\windows\system32\Wbem;c:\Program Files (x86)
\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Pro
gram Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Java\jdk1.6.0_33\bin;C:\Program Files (x86)\Common Files\Apple\Mobile Device Su
pport\;C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseSVN\bin
;C:/inpath;C:\Program Files (x86)\WinMerge;C:\ChromeDriver;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\sy
swow64

C:\>pik 200

C:\>ruby -rdevkit -ve "puts ENV['PATH']"
ruby 2.0.0p353 (2013-11-22) [i386-mingw32]
Temporarily enhancing PATH to include DevKit for 2...
C:\Ruby200\devkit\bin;C:\Ruby200\devkit\mingw\bin;C:\bin;C:\Ruby200\bin;C:\windows;C:\windows\system32;C:\windows\system32\Wbem;c:\Program Files (x86)
\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Pro
gram Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Java\jdk1.6.0_33\bin;C:\Program Files (x86)\Common Files\Apple\Mobile Device Su
pport\;C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseSVN\bin
;C:/inpath;C:\Program Files (x86)\WinMerge;C:\ChromeDriver;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\sy
swow64

Итак, все выглядит так, как будто работает правильно. но:

C:\>gem install json --platform=ruby
Temporarily enhancing PATH to include DevKit for 2...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

    C:/Ruby200/bin/ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby200/lib/ruby/gems/2.0.0/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby200/lib/ruby/gems/2.0.0/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

C:\>pik 193

C:\>gem install json --platform=ruby
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

    C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Это ясно говорит нам о двух вещах:

  • Некоторые другие файлы devkit.rb загружаются, когда я использую ruby ​​1.9, так как сообщение "для 1.9" не печатается.
  • Это вряд ли будет реальной проблемой, так как ошибка одинакова в любом случае.

Я посмотрю, смогу ли я создать вручную, используя сгенерированные файлы Makefile.

4b9b3361

Ответ 1

Итак, это не лучший ответ в мире, но я, похоже, наткнулся на решение. Если я устанавливаю многословный флаг, все работает нормально:

gem install json --platform=ruby --verbose

Здесь есть журнал: http://gist.github.com/dannysmith/8055495

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

Ответ 2

У меня есть gem json, установленный с версиями 1.8.1, но я не смог решить эту проблему для json 1.6.1, используя

gem install json --platform=ruby --verbose

Итак, я попробовал отсюда https://github.com/oneclick/rubyinstaller/issues/184

gem update --system 2.0.3

И после этого

gem install json -v 1.6.1 --platform=ruby --verbose

Решает проблему, специфичную для json 1.6.1 для Win 7 (64-разрядной) машины

Ответ 3

Попробуйте запустить командную строку в режиме администратора. После 7-10 часов я понял это...

Ответ 4

Установите 32-битную версию в Windows...

ver
windows 6.1.76011

64 бит дал сообщение об ошибке в файле makefile и заголовках. Пробовал все другие предложения, в том числе на rubyinstaller о COMSPEC и реестре, добавляя gcc к пути и другие. Некоторые драгоценные камни будут установлены, но git_fame и json не будут нужны для компиляции.

Изменить: похоже, что git_fame использует mimer_plus. mimer_plus принимает инструменты gnu (инструменты unix). Похоже, вам нужно сначала установить mingw. Это не было четко указано на странице rubyinstaller.

Ответ 5

У меня была та же проблема. Я использовал powershell для проверки моего пути

ps > $s = $env: путь

ps > $s.split( "{;}" )

я уверен, что рубинское соединение не было на пути. У меня был ruby ​​\ bin на пути, но mingw\bin находился под другой папкой. Я пошел в мой путь к среде и добавил его, и моя установка работала.

Ответ 6

Убедитесь, что версия ruby, установленная (32 или 64 бит), соответствует версии DevKit. Они оба должны быть 32 или 64, что было проблемой, с которой я столкнулся. Может быть, здесь не проблема, но подумал, что я брошу это там. Здесь стоит проверить сообщение:

Рельсы в Windows - проблема установки

Ответ 7

Как я его исправил:

  • Загрузили последнюю версию ruby ​​из https://rubyinstaller.org/downloads/
  • Запустите программу установки, следуя инструкциям по установке зависимостей.
  • Перезагрузили компьютер.
  • Добавлен каталог ruby ​​/bin в мой PATH.