2014-10-28 165 views
11

我正在創建一個Rails應用程序,並且剛剛升級到Yosemite,並且我認爲在該更新期間所有內容都會中斷。當我把所有的代碼都寫入github時,所有事情都在昨晚工作。我昨晚更新了我的電腦到優勝美地。今天我跑gem install bcrypt-ruby,一切都打破了。我有;Gem :: Ext :: BuildError:錯誤:無法構建Gem原生擴展Bcrypt-Ruby

  1. xcodebuild -license
  2. 更新捆綁
  3. brew install rbenv ruby-build rbenv-gem-rehash以獲得最新的紅寶石
  4. brew install coreutils

這並沒有工作,雖然。

環境:OSX約塞米蒂10.10rbenv 0.4.0紅寶石2.1.3p242(2014年9月19日修訂版47630)[x86_64的-darwin14.0],釀造0.9.5`

錯誤的來源是從我的Rails應用程序:

的Gemfile

gem 'rails', '4.1.5' 
gem 'pg' 
gem 'uglifier', '>= 1.3.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
gem 'sdoc', '~> 0.4.0',   group: :doc 
gem 'spring',  group: :development 
gem 'bcrypt-ruby' 

group :test, :development do 
    gem 'rspec-rails', "~> 2.14" 
end 
group :test do 
    gem 'capybara', "2.1.0" 
    gem 'factory_girl_rails', '~> 4.2.1' 
end 

我碰到了錯誤,當我跑bundle install。下面是完整的堆棧跟蹤(所有的/users//從取出名;)

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. 

    /Users//.rbenv/versions/2.0.0-p247/bin/ruby -r ./siteconf20141027-60319-1lss4fm.rb extconf.rb 
creating Makefile 

make "DESTDIR=" clean 

make "DESTDIR=" 
compiling bcrypt_ext.c 
couldn't understand kern.osversion `14.0.0' 
In file included from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby.h:33, 
       from bcrypt_ext.c:1: 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:51:21: error: string.h: No such file or directory 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:61:21: error: stdint.h: No such file or directory 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:64:23: error: inttypes.h: No such file or directory 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:68:19: error: stdio.h: No such file or directory 
In file included from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:70, 
       from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby.h:33, 
       from bcrypt_ext.c:1: 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/defines.h:29:21: error: stdlib.h: No such file or directory 
In file included from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:194, 
       from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby.h:33, 
       from bcrypt_ext.c:1: 
/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/../lib/gcc/i686-apple-darwin11/4.2.1/include/limits.h:10:25: error: limits.h: No such file or directory 
In file included from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:1567, 
       from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby.h:33, 
       from bcrypt_ext.c:1: 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/missing.h:23:45: error: math.h: No such file or directory 
In file included from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:1568, 
       from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby.h:33, 
       from bcrypt_ext.c:1: 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:36:23: error: sys/types.h: No such file or directory 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:40:22: error: sys/time.h: No such file or directory 
In file included from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:43, 
       from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:1568, 
       from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby.h:33, 
       from bcrypt_ext.c:1: 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/st.h:140: error: expected declaration specifiers or ‘...’ before ‘uint32_t’ 
In file included from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/ruby.h:1568, 
       from /Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby.h:33, 
       from bcrypt_ext.c:1: 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:326: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fdset_t’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:416: error: expected declaration specifiers or ‘...’ before ‘fd_set’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:416: error: expected declaration specifiers or ‘...’ before ‘fd_set’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:416: error: expected declaration specifiers or ‘...’ before ‘fd_set’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:416: warning: ‘struct timeval’ declared inside parameter list 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:416: warning: its scope is only this definition or declaration, which is probably not what you want 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:417: error: expected declaration specifiers or ‘...’ before ‘rb_fdset_t’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:417: error: expected declaration specifiers or ‘...’ before ‘rb_fdset_t’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:417: error: expected declaration specifiers or ‘...’ before ‘rb_fdset_t’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:417: warning: ‘struct timeval’ declared inside parameter list 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:418: warning: ‘struct timeval’ declared inside parameter list 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:514: error: expected declaration specifiers or ‘...’ before ‘mode_t’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:593: error: expected declaration specifiers or ‘...’ before ‘pid_t’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:607: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fork’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:608: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fork_err’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:610: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_waitpid’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:611: error: expected ‘)’ before ‘pid’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:612: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_spawn’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:613: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_spawn_err’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:615: error: expected ‘)’ before ‘pid’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:728: error: expected declaration specifiers or ‘...’ before ‘uint32_t’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:851: error: expected ‘)’ before ‘long’ 
/Users//.rbenv/versions/2.0.0-p247/include/ruby-2.0.0/ruby/intern.h:852: error: expected ‘)’ before ‘long’ 
bcrypt_ext.c: In function ‘bc_salt’: 
bcrypt_ext.c:21: warning: incompatible implicit declaration of built-in function ‘strlen’ 
make: *** [bcrypt_ext.o] Error 1 

make failed, exit code 2 

Gem files will remain installed in /Users//ticket_tracker/vendor/bundle/gems/bcrypt-3.1.9 for inspection. 
Results logged to /Users//ticket_tracker/vendor/bundle/extensions/x86_64-darwin-12/2.0.0-static/bcrypt-3.1.9/gem_make.out 
An error occurred while installing bcrypt (3.1.9), and Bundler cannot continue. 
Make sure that `gem install bcrypt -v '3.1.9'` succeeds before bundling. 

如果任何人有過更新OSX,Rbenv一些經驗,紅寶石等,可以給我一些指點,這將是非常感激。如果需要,我還可以發佈更多的代碼/環境。

回答

19

我有我通過重新安裝Xcode的命令行開發工具解決同樣的問題:

xcode-select --install 
bundle install 
+0

出於某種原因,這就是我想我解決了'Xcode的-license'。謝謝你清理那個。 – user3749994 2014-10-28 06:32:32

+1

似乎每個新安裝或更新的xcode都需要重新安裝命令行工具。 – 2014-11-26 16:07:34

+0

略有不同,我有同樣的錯誤,嘗試xcodebuild -license,並得到一個錯誤說需要使用sudo,所以'sudo xcodebuild -license',它的工作。我仍然在小牛隊,但已經下載了優勝美地進行安裝,所以不知道這是否會影響事情。 – gorlaz 2014-12-05 10:44:50

-1

如果還有人在那裏仍然在努力,這是不是很明顯,我建議你安裝XCode。我已經完成了兩次OSX 10.10升級,他們都需要XCode來解決這個問題。

0

升級到OS X Yosemite並嘗試運行一些rails應用程序後,我遇到了一些其他問題;

由於安裝Xcode後出現了一些蘋果錯誤,gcc不像其他gcc編譯器那樣編譯程序 - 而是要求您閱讀並同意許可協議 - 考慮到它是gcc,這是一個血腥的面頰。嘗試

gcc --version 

然後通過許可廢話和類型頁同意在年底,那麼它應該作爲一個正常的gcc編譯器作用。

但是,仍然可能無法工作,因爲gcc(4.2.1)的捆綁版本對於libv8來說太舊(需要4.4),所以您需要使用macports安裝更高版本的gcc。訪問http://www.macports.org/install.php。一旦MacPorts的安裝類型

sudo port install gcc48 +universal 
sudo port select --set gcc mp-gcc48 
hash gcc 
gcc --version 

,你應該看到

gcc (MacPorts gcc48 4.8.4_0+universal) 4.8.4 

爲2015年3月2日gcc4.8的已經有4個bug修復版本和gcc4.9已經有2所以你挑。

既然你有一個更新的gcc編譯器,下一個障礙是讓therubyracer來建立。達爾文的Gcc4.8不會識別-rdynamic選項,因此therubyracer不會構建。

我已經分叉therubyracer和修改extconf.rb旋轉編譯器選項 - 你可以使用它從github。要這樣做更改您的Gemfile像這樣

# See https://github.com/sstephenson/execjs#readme for more supported runtimes 
platforms :ruby do 
    if RUBY_PLATFORM=~ /darwin/ 
    gem 'therubyracer', :git => 'https://github.com/damianham/therubyracer.git' 
    else 
    gem 'therubyracer', '0.12.1' 
    end 
end 
1

只有行動的組合幫助我解決了這個問題。 這是我的序列

1)

xcode-select --install 
bundle install 

2)

brew update 
brew upgrade rbenv ruby-build 

3)從紅寶石2.1.4切換到2.1.5

rbenv install 2.1.5 
rbenv global 2.1.5 
rbenv shell 2.1.5 
rbenv rehash 
gem install bundler 
bundle 

4)(可選)如果您在安裝nokogiri時遇到問題

brew install libxml2 
bundle config build.nokogiri "--use-system-libraries --with-xml2-include=/usr/local/opt/libxml2/include/libxml2" 
bundle 
0

我運行紅寶石v 2.2.2,當我收到這個錯誤幫我:

寶石::分機:: BuildError:錯誤:未能建立寶石原生擴展Bcrypt德勝

xcode-select --install 
brew update 
gem install bundler 
bundle install 

如果Xcode中,選擇--install失敗,請確保您接受許可

sudo xcodebuild -license accept 
相關問題