Я пытаюсь создать приложение Ruby на Rails «Hello World» на нашем управляемом сервере, где невозможно root или sudo
.
Ruby - версия 2.3.3p222 Rails v5.2.4.1.
Я использовал rails new testproject
, чтобы создать свой тест "Hello World". Это не удается в bundle install
, потому что я не могу установить в систему гемы, получая
Error "Your user account isn't allowed to install to the system RubyGems"
Переход в папку testproject
и ввод:
bundle install --path ~/.gem
возвращает:
This failed with *"An error occurred while installing sqlite3 (1.4.2),
and Bundler cannot continue."*
The reason is an compiler error: *"conftest.c:13:57: error:
‘pthread_create’ undeclared (first use in this function)"* Problem:
The compiler can't find pthread because the *pthread.h* not included.
The only include in the conftest.c is *#include "ruby.h"* and this is
included from the system includes.
Я извлек команду g cc из файла журнала, изменил порядок папок включения, чтобы моя локальная папка включения стала первой. Я поместил пустышку "ruby .h" в локальное включение, которое включает в себя "pthread.h" и "ruby .h" из папки системного включения.
Новый g cc команда:
gcc -o conftest -I/usr/home/admin/include -I/usr/include/x86_64-linux-gnu/ruby-2.3.0 -I/usr/include/ruby-2.3.0/ruby/backward -I/usr/include/ruby-2.3.0 -I. -I/usr/include -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fdebug-prefix-map=/build/ruby2.3-LPgLkQ/ruby2.3-2.3.3=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DTAINTING_SUPPORT conftest.c -L. -L/usr/lib/x86_64-linux-gnu -L. -Wl,-z,relro -Wl,-z,now -fstack-protector -rdynamic -Wl,-export-dynamic -lruby-2.3 -lfalse -lpthread -lgmp -ldl -lcrypt -lm -lc
Новая ошибка теперь:
cannot find -lfalse
Когда я удаляю -lfalse
из команды g cc, я больше не получаю ошибок.
Так что теперь я знаю, что пропущенное включение для "pthread.h" - моя первая проблема. И -lfalse
- второй. Но как я могу решить это? Как я могу сказать bundle install
включить pthread.h? Почему там -lfalse
?
Мне потребовалось несколько часов, чтобы добраться до этой точки, но я не знаю, как продолжить.