TL; DR : Вы можете использовать предварительно скомпилированный двоичный файл с oss-binaries.phusionpassenger.com, обновив свой Ruby до версии, для которой он был установлен, например, до v2.2.8, если вы используете Gem Passenger v.5.3.1 или путем понижения гема Passenger до v5.1.9 , если вы предпочитаете использовать Ruby 2.2.7.
Однако двоичные файлы не критичны к пассажирской операции.Как говорится в журнале: Passenger will still operate normally.
Отсутствие двоичных файлов Passenger пытается загрузить тоже нормально - они не публикуют двоичные файлы для каждой версии Ruby.Вы можете безопасно установить PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY = 0 и PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY = 0 для отключения обоих - это в настройках Config Vars вашего приложения Heroku.
Подробности не могут компилироваться в сборках Пассажира: компиляция пассажиров Пассажирам: компиляция пассажировна Heroku, хотя бы на новую стогу героку-16.Мы можем проверить /tmp/passenger_native_support-fgpk65.log и затем mkmf.log, выполнив следующее:
heroku run bash
bundle exec passenger start # just to make it fill the error log file
# hit [ctrl-c]
cat /tmp/passenger_native_support-*.log
Его вывод имеет что-то вроде этого:
# /app/vendor/ruby-2.3.1/bin/ruby /app/vendor/bundle/ruby/2.3.0/gems/passenger-5.3.4/src/ruby_native_extension/extconf.rb
checking for alloca.h... *** /app/vendor/bundle/ruby/2.3.0/gems/passenger-5.3.4/src/ruby_native_extension/extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Не ясно, гдеоднако файл mkmf.log, но мы можем сделать так, чтобы он появлялся в текущем каталоге, запустив /app/vendor/bundle/ruby/2.3.0/gems/passenger-5.3.4/src/ruby_native_extension/extconf.rb
вручную, используя ту же команду, что и в приведенном выше журнале:
/app/vendor/ruby-2.3.1/bin/ruby /app/vendor/bundle/ruby/2.3.0/gems/passenger-5.3.4/src/ruby_native_extension/extconf.rb
cat mkmf.log
Тогда у нас есть это:
"gcc -o conftest -I/app/vendor/ruby-2.3.1/include/ruby-2.3.0/x86_64-linux -I/app/vendor/ruby-2.3.1/include/ruby-2.3.0/ruby/backward -I/app/vendor/ruby-2.3.1/include/ruby-2.3.0 -I/app/vendor/bundle/ruby/2.3.0/gems/passenger-5.3.4/src/ruby_native_extension -O3 -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -Wno-maybe-uninitialized -fPIC -g conftest.c -L. -L/app/vendor/ruby-2.3.1/lib -Wl,-R/app/vendor/ruby-2.3.1/lib -L. -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,-rpath,'/../lib' -Wl,-R'/../lib' -lruby -lpthread -lgmp -ldl -lcrypt -lm -lc"
sh: 1: gcc: not found
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5: return 0;
6: }
/* end */
Итак, корень проблемы в том, что gcc недоступен во время выполнения стека heroku-16 - и это, вероятно, по назначению.Нелегко сделать gcc доступным там, хотя кажется, что возможно , но я бы не стал этого делать при условии, что мы можем решить эту проблему иначе.