Phusion-passenger компилирует расширение для неправильного ruby ​​при использовании RVM - PullRequest
2 голосов
/ 04 июня 2011

Я установил RVM для всей системы с Ruby 1.9.2 и, насколько я могу судить, он работает нормально.

Но когда я пытаюсь скомпилировать модуль Apache2 Passenger через

passenger-install-apache2-module

Компилируется для системы 1.8.7 (папка ext/ruby содержит ruby-1.8.7-x86_64-linux), и когда я запускаю apache, Пассажир жалуется:

*** Phusion Passenger: no passenger_native_support.so found for the current Ruby interpreter. Compiling one...
# mkdir -p /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7/ext/ruby/ruby-1.9.2-x86_64-linux

Но проблема в том, что Apache запускается на чтение- только файловая система, поэтому Passenger не может скомпилировать модуль во время выполнения.Что мне нужно сделать, чтобы заставить его скомпилировать его заранее для Ruby 1.9.2?

Я даже удалил оригинальный /usr/bin/ruby18 бинарный файл, а затем он заканчивается ошибкой:

Compiling and installing Apache 2 module...
cd /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7
/usr/local/rvm/wrappers/ruby-1.9.2-p180/rake apache2:clean apache2 RELEASE=yes
# /usr/local/rvm/wrappers/ruby-1.9.2-p180/rake apache2:clean apache2 RELEASE=yes
/usr/bin/env: ruby18: No such file or directory

PS.Я прочитал несколько подобных вопросов здесь, но, кажется, ни один из них не относится напрямую.Файл /usr/local/rvm/gems/ruby-1.9.2-p180/bin/passenger-install-apache2-module имеет правильную строку взрыва для ...1.9.2-p180/bin/ruby.

РЕДАКТИРОВАТЬ: Добавлена ​​дополнительная информация

Apache Passenger conf:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7
PassengerRuby /usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby
PassengerLogLevel 3
PassengerDebugLogFile /tmp/passenger.log

И на всякий случай полезно выложить rvm info вывод.

ruby-1.9.2-p180:

  system:
    uname:       "Linux aevastaja 2.6.31-gentoo-r6 #2 SMP Wed Jan 6 19:40:30 EET 2010 x86_64 GNU/Linux"
    bash:        "/bin/bash => GNU bash, version 4.1.9(2)-release (x86_64-pc-linux-gnu)"
    zsh:         " => not installed"

  rvm:
    version:      "rvm 1.6.18 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]"

  ruby:
    interpreter:  "ruby"
    version:      "1.9.2p180"
    date:         "2011-02-18"
    platform:     "x86_64-linux"
    patchlevel:   "2011-02-18 revision 30909"
    full_version: "ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]"

  homes:
    gem:          "/usr/local/rvm/gems/ruby-1.9.2-p180"
    ruby:         "/usr/local/rvm/rubies/ruby-1.9.2-p180"

  binaries:
    ruby:         "/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby"
    irb:          "/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/irb"
    gem:          "/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/gem"
    rake:         "/usr/local/rvm/gems/ruby-1.9.2-p180/bin/rake"

  environment:
    PATH:         "/usr/local/rvm/gems/ruby-1.9.2-p180/bin:/usr/local/rvm/gems/ruby-1.9.2-p180@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p180/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.4.5"
    GEM_HOME:     "/usr/local/rvm/gems/ruby-1.9.2-p180"
    GEM_PATH:     "/usr/local/rvm/gems/ruby-1.9.2-p180:/usr/local/rvm/gems/ruby-1.9.2-p180@global"
    MY_RUBY_HOME: "/usr/local/rvm/rubies/ruby-1.9.2-p180"
    IRBRC:        "/usr/local/rvm/rubies/ruby-1.9.2-p180/.irbrc"
    RUBYOPT:      ""
    gemset:       ""

Ответы [ 7 ]

7 голосов
/ 09 мая 2014

Если вы используете разные ruby-версии для разных версий, вам может понадобиться только native-поддержка, и вы можете просто запустить passenger-config build-native-support после переключения на правильную ruby-версию.

Используйте passenger-config build-native-support --help, чтобы узнать, для какой ruby-версии команда создаст собственную поддержку.

2 голосов
/ 30 сентября 2014

Для других с этой проблемой, обратите внимание, что Пассажир может принимать сигналы из файла конфигурации (например, /etc/httpd/conf.d/passenger.conf), отличного от вашего основного файла конфигурации Apache.

1 голос
/ 26 июня 2013

Опоздал на вечеринку, я знаю, но вот что исправило это для меня:

После запуска passenger-install-apache2-module для Ruby 1.8.7 и 2.0.0 я закончил сpassenger_native_support.so in:

/usr/local/rvm/gems/ruby-1.8.7-p371/gems/passenger-4.0.5/libout/ruby/ruby-1.8.7-x86_64-linux/passenger_native_support.so
/usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/libout/ruby/ruby-2.0.0-x86_64-linux/passenger_native_support.so

У меня PassengerDefaultRuby установлен на оболочку 2.0.0, а для конкретного виртуального хоста PassengerRuby установлен на оболочку 1.8.7.Приложение 1.8.7 не запустилось, потому что Passenger не знал, где искать версию passenger_native_support.so 1.8.7, и не имел права на запись для компиляции новой версии.

Два варианта решения этой проблемы:1.) Установите новый каталог с PASSENGER_NATIVE_SUPPORT_OUTPUT_DIR, к которому у него есть доступ для записи, или 2.) поместите символьный выходной каталог 1.8.7 в выходной каталог 2.0.0, например,

$ ls -l /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/libout/ruby
  ruby-1.8.7-x86_64-linux -> /usr/local/rvm/gems/ruby-1.8.7-p371/gems/passenger-4.0.5/libout/ruby/ruby-1.8.7-x86_64-linux
  ruby-2.0.0-x86_64-linux
1 голос
/ 05 июня 2011

Обычно я устанавливаю Passenger в наборе global, а затем создаю оболочку для него. Следующее руководство показывает каждый шаг.

0 голосов
/ 03 мая 2016

Потребуется установить переменную " GEM_HOME ".

Добавьте это в файл конфигурации вашего пассажира (например: /etc/apache2/mods-enabled/passenger.conf):

SetEnv GEM_HOME /usr/local/rvm/gems/ruby-2.3.1

Конечно, замените это " ruby-2.3.1 " на вашу актуальную версию.


Более обширный пример:

<IfModule mod_passenger.c>
  SetEnv GEM_HOME /usr/local/rvm/gems/ruby-2.3.1
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/passenger_free_ruby
</IfModule>
0 голосов
/ 05 июня 2011

Оказывается, что, очевидно, при установке более новой версии Rake gem у меня была неправильная среда, и, хотя gem оказался в RVM под 1.9.2, он фактически ссылался на двоичный файл системы 1.8.7, и сценарий установки Passenger запускал эти грабли, которые в свою очередь построил модуль против неправильного рубина.

Помог удалить и переустановить Rake gem.

0 голосов
/ 04 июня 2011

Вы переключили свой Ruby до запуска пассажирской установки?

rvm use 1.9.2

Вы можете проверить свой текущий Ruby (и гемсет и т.д.) с помощью:

rvm info
...