Рельсы на пассажире, не признающие RVM

Я переключился на ree, используя rvm:

rvm use [email protected]

и установил камень kaminari через Gemfile и установить пакет.

Но пассажир Phusion, похоже, все еще ищет драгоценный камень в системном каталоге по умолчанию. В нем говорится:

Error message:
    Could not find kaminari-0.10.4 in any of the sources (Bundler::GemNotFound)

Что мне не хватает? Rails нуждается в какой-либо конкретной конфигурации для распознавания текущей версии ruby ​​и gemset, которые я использую

Ответы

Ответ 1

Вам необходимо проинструктировать Пассажира загрузить RVM, а затем настроить среду для вашего gemset. Самый простой способ сделать это - три шага:

  • Создайте файл .rvmrc. В корне вашего проекта rails создайте файл с именем .rvmrc, который содержит команду RVM, которую вы будете использовать для загрузки своего gemset. Например:

    rvm use [email protected]
    
  • Доверяйте файлу .rvmrc. После того, как вы развернули новый файл .rvmrc на свой сервер, смените каталоги на проект rails. RVM должен спросить вас, хотите ли вы доверять своему файлу .rvmrc; просто следуйте инструкциям и введите yes. Если приглашение не появляется, используйте следующую команду, чтобы доверять своему .rvmrc:

    rvm rvmrc trust
    

    Примечание. Если вы хотите автоматически доверять всем .rvmrc s, просто добавить:

    rvm_trust_rvmrcs_flag=1
    

    для вашего личного или системного rvmrc (~/.rvmrc и /etc/rvmrc, соответственно).

  • Поручить пассажиру настроить среду RVM. Попросите пассажира загрузить RVM и использовать gemset в вашем файле .rvmrc, создав новый файл в каталоге Rails config называется setup_load_paths.rb (так что config/setup_load_paths.rb во всех). Файл должен содержать содержимое https://gist.github.com/870310:

    if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
      begin
        rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
        rvm_lib_path = File.join(rvm_path, 'lib')
        $LOAD_PATH.unshift rvm_lib_path
        require 'rvm'
        RVM.use_from_path! File.dirname(File.dirname(__FILE__))
      rescue LoadError
        raise "RVM ruby lib is currently unavailable."
      end
    end
    
    # This assumes Bundler 1.0+
    ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
    require 'bundler/setup'
    

    Теперь, когда вы перезагружаете приложение (touch tmp/restart.txt), вам должно быть хорошо идти.

Вы должны заметить, что Пассажир может запускать только одну версию Ruby за раз; если Пассажир был настроен под чем-то другим, кроме ree, вам, вероятно, придется переустановить Пассажир и/или повторить создавшуюся оболочку script.

Ответ 2

Просто добавьте примечание к шагу 3 ответа Отмечено (Broandon's), потому что я не получил свой Passenger3 и запустил его с помощью этих кодов.

Сообщение об ошибке выглядит следующим образом:

*** Phusion Passenger: no passenger_native_support.bundle found for the current Ruby interpreter. Compiling one...
# mkdir -p /Users/jerry/.rvm/gems/[email protected]/gems/passenger-3.0.18/ext/ruby/ruby-1.9.3-x86_64-macosx
# cd /Users/jerry/.rvm/gems/[email protected]/gems/passenger-3.0.18/ext/ruby/ruby-1.9.3-x86_64-macosx
Unable to locate the RVM path. Your RVM installation is probably too old. Please update it with 'rvm get head && rvm reload && rvm repair all'.

Ссылаясь на сообщение "Не удалось найти путь RVM", я проверил документацию RVM https://rvm.io/integration/passenger/

Измените config/setup_load_paths.rb на это:

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    gems_path = ENV['MY_RUBY_HOME'].split(/@/)[0].sub(/rubies/,'gems')
    ENV['GEM_PATH'] = "#{gems_path}:#{gems_path}@global"
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    raise "RVM gem is currently unavailable."
  end
end

# If you're not using Bundler at all, remove lines bellow
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

Проблема решена!

Ответ 3

Я последовал предложенному ответу, и он переместил меня вперед, но затем я получил сообщение об ошибке:

RVM - интеграция Ruby была извлечена в отдельный камень, он должен быть установлен по умолчанию > с RVM, удалить строку $LOAD_PATH.unshift, и все должно быть хорошо. Подробнее см. https://rvm.io/integration/passenger. (RuntimeError)

Теперь у пассажира есть драгоценный камень. Моя ошибка не была установлена ​​в рубиновой версии и gemset, которые я использовал. Как только я это сделал - все работало сладко.

Ответ 4

Удалите файл config/setup_load_paths.rb для Passenger 4. Это не нужно.