2014-10-28 16 views
11

Tôi đang tạo ứng dụng đường ray và chỉ nâng cấp lên Yosemite và tôi nghĩ mọi thứ đã bị hỏng trong quá trình cập nhật đó. Tất cả mọi thứ đã làm việc đêm qua khi tôi kiểm tra trong tất cả các mã của tôi để github. Tôi cập nhật máy tính của tôi đêm qua để Yosemite. Hôm nay tôi chạy gem install bcrypt-ruby và mọi thứ đã bị hỏng. Tôi có;Gem :: Ext :: BuildError: ERROR: Không thể xây dựng phần mở rộng đá quý Bcrypt-Ruby

  1. chạy xcodebuild -license
  2. cập nhật bundler
  3. chạy brew install rbenv ruby-build rbenv-gem-rehash để có được ruby ​​mới nhất
  4. chạy brew install coreutils

Đó không làm việc mặc dù.

môi trường:OSX Yosemite 10.10, rbenv 0.4.0, ruby ​​2.1.3p242 (2014/09/19 sửa đổi 47.630) [x86_64-darwin14.0], brew 0.9.5 '

nguồn của lỗi này là từ ứng dụng ray của tôi:

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 

Tôi gặp lỗi khi chạy bundle install. Dưới đây là stack trace đầy đủ (tất cả các /users// được từ lấy ra tên ;)

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. 

Nếu ai đã có một số kinh nghiệm được cập nhật OSX, Rbenv, Ruby vv và có thể cho tôi một số gợi ý, đó sẽ là Nhiều đánh giá cao. Tôi cũng có thể đăng thêm mã/môi trường được thiết lập nếu cần.

Trả lời

19

tôi đã cùng một vấn đề mà tôi giải quyết bằng cách cài đặt lại các công cụ phát triển XCode dòng lệnh:

xcode-select --install 
bundle install 
+0

Đối với một số lý do đó là những gì tôi nghĩ rằng tôi giải quyết với 'xcode -license'. Cám ơn giải thích rõ ràng. – user3749994

+1

Dường như mọi cài đặt hoặc cập nhật mới của xcode đều yêu cầu cài đặt lại các công cụ dòng lệnh. –

+0

Mất một chút khác nhau, tôi đã có lỗi tương tự, đã thử xcodebuild -license và gặp lỗi khi nói cần sử dụng sudo, vì vậy 'sudo xcodebuild -license' và nó hoạt động. Tôi vẫn còn trên Mavericks nhưng đã có Yosemite tải xuống để cài đặt, vì vậy không chắc chắn nếu đó là tác động đến mọi thứ. – gorlaz

-1

Nếu có ai ngoài kia vẫn đang gặp khó khăn và nó không phải là rõ ràng, tôi sẽ khuyên bạn nên cài đặt XCode. Tôi đã thực hiện hai nâng cấp OSX 10.10 và cả hai đều yêu cầu XCode để giải quyết vấn đề này.

0

Sau khi nâng cấp lên OS X Yosemite và cố gắng chạy một số ứng dụng đường ray, tôi gặp phải một số vấn đề khác;

Do một số chứng điên cuồng sau khi cài đặt Xcode gcc không biên dịch chương trình như bất kỳ trình biên dịch gcc nào khác - thay vào đó nó yêu cầu bạn đọc và đồng ý với thỏa thuận cấp phép - đó là một má đẫm máu. Hãy thử

gcc --version 

sau đó trang qua crap giấy phép và loại đồng ý ở cuối thì nó sẽ hoạt động như một trình biên dịch gcc bình thường.

Tuy nhiên, vẫn có thể không hoạt động vì phiên bản gói gcc (4.2.1) quá cũ cho libv8 (4.4 là bắt buộc) nên thay vào đó bạn cần cài đặt phiên bản gcc mới hơn bằng macports. Truy cập http://www.macports.org/install.php.Một khi được cài đặt macports loại

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

và bạn sẽ thấy

gcc (MacPorts gcc48 4.8.4_0+universal) 4.8.4 

như của 2015/03/02 gcc4.8 được ghé thăm 4 phát hành bản vá lỗi và gcc4.9 được ghé thăm 2 để đưa đón bạn .

Bây giờ bạn có trình biên dịch gcc cập nhật hơn, rào cản tiếp theo là nhận được bộ đệm để xây dựng. Gcc4.8 trên darwin không nhận ra tùy chọn -rdynamic để therubyracer sẽ không xây dựng.

Tôi đã chia nhỏ bộ đệm và sửa đổi extconf.rb thành tùy chọn trình biên dịch - bạn có thể sử dụng nó từ github. Để làm như vậy, hãy thay đổi Gemfile của bạn như vậy

# 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

Chỉ kết hợp các hành động mới giúp tôi giải quyết vấn đề. Đây là chuỗi của tôi

1)

xcode-select --install 
bundle install 

2)

brew update 
brew upgrade rbenv ruby-build 

3) Switched từ ruby ​​2.1.4 đến 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) (không bắt buộc) trong trường hợp bạn gặp sự cố khi cài đặt nokogiri

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

Tôi đang chạy của Ruby v 2.2.2, điều này đã giúp tôi khi tôi nhận được lỗi này:

Gem :: Ext :: BuildError: ERROR: Không thể xây dựng mở rộng nguồn gốc đá quý bcrypt-Ruby

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

Nếu -install xcode-chọn không chắc chắn rằng bạn đã chấp nhận các giấy phép

sudo xcodebuild -license accept 
Các vấn đề liên quan