Je suis coincé avec l'installation de la gemme bson_ext avec la version 1.5.1. J'ai essayé presque tout ce que j'ai trouvé sur le Web mais rien n'y fait. J'ai essayé de réinstaller ruby, rvm et ainsi de suite.
J'utilise:
et après l'installation du bundle, j'ai un journal comme celui-ci:
Fetching bson_ext 1.5.1 Installing bson_ext 1.5.1 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/lukasz/.rvm/gems/ruby-2.6.5/gems/bson_ext-1.5.1/ext/cbson /Users/lukasz/.rvm/rubies/ruby-2.6.5/bin/ruby -I /Users/lukasz/.rvm/rubies/ruby-2.6.5/lib/ruby/site_ruby/2.6.0 -r ./siteconf20201001-15946-1sze5ll.rb extconf.rb checking for asprintf()... yes checking for ruby/st.h... yes checking for ruby/regex.h... yes checking for ruby/encoding.h... yes creating Makefile current directory: /Users/lukasz/.rvm/gems/ruby-2.6.5/gems/bson_ext-1.5.1/ext/cbson make "DESTDIR=" clean current directory: /Users/lukasz/.rvm/gems/ruby-2.6.5/gems/bson_ext-1.5.1/ext/cbson make "DESTDIR=" compiling bson_buffer.c compiling cbson.c cbson.c:118:36: warning: passing 'char *' to parameter of type 'const unsigned char *' converts between pointers to integer types with different sign [-Wpointer-sign] result_t status = check_string(RSTRING_PTR(string), RSTRING_LEN(string), ^~~~~~~~~~~~~~~~~~~ /Users/lukasz/.rvm/rubies/ruby-2.6.5/include/ruby-2.6.0/ruby/ruby.h:1003:5: note: expanded from macro 'RSTRING_PTR' (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./encoding_helpers.h:26:44: note: passing argument to parameter 'string' here result_t check_string(const unsigned char* string, const int length, ^ cbson.c:118:57: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] result_t status = check_string(RSTRING_PTR(string), RSTRING_LEN(string), ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~ /Users/lukasz/.rvm/rubies/ruby-2.6.5/include/ruby-2.6.0/ruby/ruby.h:1000:6: note: expanded from macro 'RSTRING_LEN' RSTRING_EMBED_LEN(str) : \ ^~~~~~~~~~~~~~~~~~~~~~ /Users/lukasz/.rvm/rubies/ruby-2.6.5/include/ruby-2.6.0/ruby/ruby.h:996:6: note: expanded from macro 'RSTRING_EMBED_LEN' (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cbson.c:118:57: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] result_t status = check_string(RSTRING_PTR(string), RSTRING_LEN(string), ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~ /Users/lukasz/.rvm/rubies/ruby-2.6.5/include/ruby-2.6.0/ruby/ruby.h:1001:28: note: expanded from macro 'RSTRING_LEN' RSTRING(str)->as.heap.len) ~~~~~~~~~~~~~~~~~~~~~~^~~ cbson.c:128:45: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] SAFE_WRITE(buffer, RSTRING_PTR(string), RSTRING_LEN(string)); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ /Users/lukasz/.rvm/rubies/ruby-2.6.5/include/ruby-2.6.0/ruby/ruby.h:1000:6: note: expanded from macro 'RSTRING_LEN' RSTRING_EMBED_LEN(str) : \ ^ /Users/lukasz/.rvm/rubies/ruby-2.6.5/include/ruby-2.6.0/ruby/ruby.h:996:6: note: expanded from macro 'RSTRING_EMBED_LEN' (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ ^ cbson.c:68:46: note: expanded from macro 'SAFE_WRITE' if (bson_buffer_write((buffer), (data), (size)) != 0) \ ~~~~~~~~~~~~~~~~~ ^~~~ cbson.c:128:45: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] SAFE_WRITE(buffer, RSTRING_PTR(string), RSTRING_LEN(string)); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ /Users/lukasz/.rvm/rubies/ruby-2.6.5/include/ruby-2.6.0/ruby/ruby.h:1001:28: note: expanded from macro 'RSTRING_LEN' RSTRING(str)->as.heap.len) ^ cbson.c:68:46: note: expanded from macro 'SAFE_WRITE' if (bson_buffer_write((buffer), (data), (size)) != 0) \ ~~~~~~~~~~~~~~~~~ ^~~~ cbson.c:303:20: warning: unused variable 'values' [-Wunused-variable] VALUE* values; ^ cbson.c:602:18: error: implicit declaration of function 'bson_buffer_get_max_size' is invalid in C99 [-Werror,-Wimplicit-function-declaration] if (length > bson_buffer_get_max_size(buffer)) { ^ cbson.c:602:18: note: did you mean 'bson_buffer_set_max_size'? ./bson_buffer.h:34:6: note: 'bson_buffer_set_max_size' declared here void bson_buffer_set_max_size(bson_buffer_t buffer, int max_size); ^ 6 warnings and 1 error generated. make: *** [cbson.o] Error 1 make failed, exit code 2 Gem files will remain installed in /Users/lukasz/.rvm/gems/ruby-2.6.5/gems/bson_ext-1.5.1 for inspection. Results logged to /Users/lukasz/.rvm/gems/ruby-2.6.5/extensions/x86_64-darwin-19/2.6.0/bson_ext-1.5.1/gem_make.out An error occurred while installing bson_ext (1.5.1), and Bundler cannot continue. Make sure that `gem install bson_ext -v '1.5.1' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: bson_ext
Quelqu'un a une idée de ce que je peux essayer d'autre? De plus, je peux dire que bson_ext avec une autre version comme 1.9.1 s'installe avec succès. Mais dans ce projet, je dois utiliser 1.5.1.
3 Réponses :
L'installation de la version 1.3.1 a fonctionné pour moi
Je comprends mais je ne peux pas changer de version dans ce projet et je suis obligé d'utiliser 1.5.1
1.5.1 a 9 ans, il n'y a donc aucune raison de croire que cela devrait fonctionner. Et, en effet, cela échoue également pour moi avec la même erreur (Big Sur / 2.7.1 et 2.8.0).
Cela étant dit, si vous insistez à 100% pour le faire et que vous n'avez pas d'alternative telle que changer d'employeur et / ou une carrière prometteuse en archéologie logicielle sur laquelle vous rabattre, essayez ceci:
Accédez au dossier indiqué dans le message d'erreur, /Users/lukasz/.rvm/gems/ruby-2.6.5/gems/bson_ext-1.5.1 for inspection.
De là, accédez à ext/cbson
et modifiez le fichier bson_buffer.h
.
Vous devez insérer une ligne, près du haut du fichier:
@ in bson_ext-1.5.1 $ gem list bson_ext *** LOCAL GEMS *** bson_ext (1.5.1)
lancez make
dans ce dossier. Cela devrait fonctionner avec seulement quelques avertissements.
Après cela, vous devez toujours l'installer. Vérifiez l' gem help install
pour plus de détails sur le processus. Ceci suit ses instructions:
@ in bson_ext-1.5.1 $ gem spec ../../cache/bson_ext-1.5.1.gem --ruby > ../../specifications/bson_ext-1.5.1.gemspec
Et en effet:
/* A buffer */ typedef struct bson_buffer* bson_buffer_t; /* A position in the buffer */ typedef int bson_buffer_position; /***** THE FOLLOWING IS THE LINE YOU NEED TO INSERT ****/ int bson_buffer_get_max_size(bson_buffer_t buffer); /* Allocate and return a new buffer. * Return NULL on allocation failure. */ bson_buffer_t bson_buffer_new(void);
Notez que cela se trouvait à nouveau dans le dossier «d'origine».
Même après cela, faire simplement requite 'bson_ext' ne fonctionne pas pour moi et exiger que 'bson' se plaint de son absence. D'après ce message d'erreur, vous pourriez réussir en déplaçant - et je veux être très précis ici - quelque chose , quelque part . Aucune garantie que cela fonctionnera réellement. Probablement pas.
Belle correction, je n'avais pas le fichier gemspec dans mon dossier de spécifications. J'ai ajouté un fichier vide avec le nom bson_ext-1.5.1.gemspec
puis bson_ext-1.5.1.gemspec
exécuté la commande: $ gem spec ../../cache/bson_ext-1.5.1.gem --ruby > ../../specifications/bson_ext-1.5.1.gemspec
J'ai trouvé une meilleure solution, lorsque vous installez la gemme, ajoutez-la à la fin
-- --with-cflags="-Wno-error=implicit-function-declaration"
Avez-vous essayé d'exécuter une commande d'installation de gem distincte comme suggéré dans la sortie ci-dessous?
gem install bson_ext -v '1.5.1' --source 'https://rubygems.org/'
. Parfois, cela peut vous donner un contexte supplémentaire.