2013-02-09 23 views
0

第一次嘗試使用berkshelf寶石,但它說在Windows 8的x64 FFI問題

bundle exec berks coolbook test_cookbook 
    D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/win32/api.rb:20: 
    in `require': cannot load such file -- ffi (LoadError) 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/win 
    32/api.rb:20:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/win 
    32/api/security.rb:19:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/win 
    32/api/security.rb:19:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/win 
    32/security.rb:19:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/win 
    32/security.rb:19:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/fil 
    e_access_control/windows.rb:20:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/fil 
    e_access_control/windows.rb:20:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/fil 
    e_access_control.rb:30:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/fil 
    e_access_control.rb:30:in `<class:FileAccessControl>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/fil 
    e_access_control.rb:27:in `<class:Chef>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/fil 
    e_access_control.rb:22:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/mix 
    in/enforce_ownership_and_permissions.rb:19:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/mix 
    in/enforce_ownership_and_permissions.rb:19:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/pro 
    vider.rb:23:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/pro 
    vider.rb:23:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/pla 
    tform.rb:26:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/chef-10.16.2/lib/chef/pla 
    tform.rb:26:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/berkshelf-1.1.6/lib/berks 
    helf.rb:2:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/berkshelf-1.1.6/lib/berks 
    helf.rb:2:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/berkshelf-1.1.6/bin/berks 
    :3:in `require' 
      from D:/dev/vagrant/vagrant/embedded/gems/gems/berkshelf-1.1.6/bin/berks 
    :3:in `<top (required)>' 
      from D:/dev/vagrant/vagrant/embedded/gems/bin/berks:23:in `load' 
      from D:/dev/vagrant/vagrant/embedded/gems/bin/berks:23:in `<main>' 

然後試圖重新安裝不同版本的

gem uninstall ffi 
gem install ffi -v 1.0.9 

gem uninstall ffi 
gem install ffi 

它安裝好了,但一些失敗FFI寶石同時安裝文檔

1 gem installed 
Installing ri documentation for ffi-1.3.1-x86-mingw32... 
Enclosing class/module 'moduleFFI' for class AbstractMemory not known 
Enclosing class/module 'moduleFFI' for class NullPointerError not known 
Enclosing class/module "classMemory" for alias put_" #name, "put_" #old); \ 
    rb_define_alias(classMemory, "get_" #name, "get_" #old); \ 
    rb_define_alias(classMemory, "put_u" #name, "put_u" #old); \ 
    rb_define_alias(classMemory, "get_u" #name, "get_u" #old); \ 
    rb_define_alias(classMemory, "write_" #name, "write_" #old); \ 
    rb_define_alias(classMemory, "read_" #name, "read_" #old); \ 
    rb_define_alias(classMemory, "write_u" #name, "write_u" #old); \ 
    rb_define_alias(classMemory, "read_u" #name, "read_u" #old); \ 
    rb_define_alias(classMemory, "put_array_of_" #name, "put_array_of_" #old); \ 

    rb_define_alias(classMemory, "get_array_of_" #name, "get_array_of_" #old); \ 

    rb_define_alias(classMemory, "put_array_of_u" #name, "put_array_of_u" #old); 
\ 
    rb_define_alias(classMemory, "get_array_of_u" #name, "get_array_of_u" #old); 
\ 
    rb_define_alias(classMemory, "write_array_of_" #name, "write_array_of_" #old 
); \ 
    rb_define_alias(classMemory, "read_array_of_" #name, "read_array_of_" #old); 
\ 
    rb_define_alias(classMemory, "write_array_of_u" #name, "write_array_of_u" #o 
ld); \ 
    rb_define_alias(classMemory, "read_array_of_u" #name, "read_array_of_u" #old 
); 

    ALIAS(char, int8); 
    ALIAS(short, int16); 
    ALIAS(int, int32); 
    ALIAS(long_long, int64); 

    /* 
    * Document-method: put_float32 
    * call-seq: memory.put_float32offset, value) 
    * @param [Numeric] offset 
    * @param [Numeric] value 
    * @return [self] 
    * Put +value+ as a 32-bit float in memory at offset +offset+ (alias: #put_f 
loat). 
    */ 
    rb_define_method(classMemory, "put_float32", memory_put_float32, 2); 
    /* 
    * Document-method: get_float32 
    * call-seq: memory.get_float32(offset) 
    * @param [Numeric] offset 
    * @return [Float] 
    * Get a 32-bit float from memory at offset +offset+ (alias: #get_float). 
    */ 
    rb_define_method(classMemory, "get_float32", memory_get_float32, 1); 
    rb_define_alias(classMemory, "put_float put_float32 not known 
Enclosing class/module "classMemory" for alias get_float get_float32 not known 
Enclosing class/module "classMemory" for alias put_array_of_float put_array_of_f 
loat32 not known 
Enclosing class/module "classMemory" for alias get_array_of_float get_array_of_f 
loat32 not known 
Enclosing class/module "classMemory" for alias put_double put_float64 not known 
Enclosing class/module "classMemory" for alias get_double get_float64 not known 
Enclosing class/module "classMemory" for alias put_array_of_double put_array_of_ 
float64 not known 
Enclosing class/module "classMemory" for alias get_array_of_double get_array_of_ 
float64 not known 
Enclosing class/module "classMemory" for alias size total not known 
Enclosing class/module 'moduleFFI' for class ArrayType not known 
Enclosing class/module 'moduleFFI' for class Buffer not known 
Enclosing class/module "BufferClass" for alias length total not known 
Enclosing class/module 'moduleFFI' for module DataConverter not known 
Enclosing class/module 'moduleFFI' for class DynamicLibrary not known 
Enclosing class/module 'LibraryClass' for class Symbol not known 
Enclosing class/module 'rbffi_TypeClass' for class Mapped not known 
Enclosing class/module 'rbffi_StructLayoutClass' for class CharArray not known 
Enclosing class/module "rbffi_StructLayoutCharArrayClass" for alias to_str to_s 
not known 
Installing RDoc documentation for ffi-1.3.1-x86-mingw32... 
Enclosing class/module 'moduleFFI' for class AbstractMemory not known 
Enclosing class/module 'moduleFFI' for class NullPointerError not known 
Enclosing class/module "classMemory" for alias put_" #name, "put_" #old); \ 
    rb_define_alias(classMemory, "get_" #name, "get_" #old); \ 
    rb_define_alias(classMemory, "put_u" #name, "put_u" #old); \ 
    rb_define_alias(classMemory, "get_u" #name, "get_u" #old); \ 
    rb_define_alias(classMemory, "write_" #name, "write_" #old); \ 
    rb_define_alias(classMemory, "read_" #name, "read_" #old); \ 
    rb_define_alias(classMemory, "write_u" #name, "write_u" #old); \ 
    rb_define_alias(classMemory, "read_u" #name, "read_u" #old); \ 
    rb_define_alias(classMemory, "put_array_of_" #name, "put_array_of_" #old); \ 

    rb_define_alias(classMemory, "get_array_of_" #name, "get_array_of_" #old); \ 

    rb_define_alias(classMemory, "put_array_of_u" #name, "put_array_of_u" #old); 
\ 
    rb_define_alias(classMemory, "get_array_of_u" #name, "get_array_of_u" #old); 
\ 
    rb_define_alias(classMemory, "write_array_of_" #name, "write_array_of_" #old 
); \ 
    rb_define_alias(classMemory, "read_array_of_" #name, "read_array_of_" #old); 
\ 
    rb_define_alias(classMemory, "write_array_of_u" #name, "write_array_of_u" #o 
ld); \ 
    rb_define_alias(classMemory, "read_array_of_u" #name, "read_array_of_u" #old 
); 

    ALIAS(char, int8); 
    ALIAS(short, int16); 
    ALIAS(int, int32); 
    ALIAS(long_long, int64); 

    /* 
    * Document-method: put_float32 
    * call-seq: memory.put_float32offset, value) 
    * @param [Numeric] offset 
    * @param [Numeric] value 
    * @return [self] 
    * Put +value+ as a 32-bit float in memory at offset +offset+ (alias: #put_f 
loat). 
    */ 
    rb_define_method(classMemory, "put_float32", memory_put_float32, 2); 
    /* 
    * Document-method: get_float32 
    * call-seq: memory.get_float32(offset) 
    * @param [Numeric] offset 
    * @return [Float] 
    * Get a 32-bit float from memory at offset +offset+ (alias: #get_float). 
    */ 
    rb_define_method(classMemory, "get_float32", memory_get_float32, 1); 
    rb_define_alias(classMemory, "put_float put_float32 not known 
Enclosing class/module "classMemory" for alias get_float get_float32 not known 
Enclosing class/module "classMemory" for alias put_array_of_float put_array_of_f 
loat32 not known 
Enclosing class/module "classMemory" for alias get_array_of_float get_array_of_f 
loat32 not known 
Enclosing class/module "classMemory" for alias put_double put_float64 not known 
Enclosing class/module "classMemory" for alias get_double get_float64 not known 
Enclosing class/module "classMemory" for alias put_array_of_double put_array_of_ 
float64 not known 
Enclosing class/module "classMemory" for alias get_array_of_double get_array_of_ 
float64 not known 
Enclosing class/module "classMemory" for alias size total not known 
Enclosing class/module 'moduleFFI' for class ArrayType not known 
Enclosing class/module 'moduleFFI' for class Buffer not known 
Enclosing class/module "BufferClass" for alias length total not known 
Enclosing class/module 'moduleFFI' for module DataConverter not known 
Enclosing class/module 'moduleFFI' for class DynamicLibrary not known 
Enclosing class/module 'LibraryClass' for class Symbol not known 
Enclosing class/module 'rbffi_TypeClass' for class Mapped not known 
Enclosing class/module 'rbffi_StructLayoutClass' for class CharArray not known 
Enclosing class/module "rbffi_StructLayoutCharArrayClass" for alias to_str to_s 
not known 


gem uninstall ffi 
gem install ffi 

但是沒有ffi安裝修復了berkshelf的主要問題。

回答

1

我有一個類似的問題,在64位Linux下安裝另一個gem。當編譯寶石時,我會得到關於該寶石的完全相同的錯誤。我的修復是安裝libffi-dev包,它工作。這個軟件包的Windows/MingW版本有一個X86-64,所以我建議確保你已經安裝了這個。

0

我對ruby 1.9.3 ruby​​ 1.9.3p551和64位linux也有類似的問題。安裝libffi-dev是第一步,如答案編號1所示。

gem uninstall ffi 
gem install ffi 

仍然有同樣的問題。只有在添加了rdoc gem的安裝後:

gem install rdoc 
gem uninstall ffi 
gem install ffi 

沒有錯誤。