Рельсы на Пассажире не распознают RVM - PullRequest
14 голосов
/ 15 марта 2011

Я перешел на ри с помощью rvm на:

rvm use ree@mygemset

и установленный kaminari gem через Gemfile и пакетную установку.

Но пассажир Phusion, похоже, все еще ищет камень в системном каталоге по умолчанию. Там написано:

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

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

Ответы [ 4 ]

30 голосов
/ 15 марта 2011

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

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

    rvm use ree@gemset
    
  2. Доверяйте файлу .rvmrc : как только вы развернули новый файл .rvmrc на своем сервере, измените каталоги в своемрельсовый проект.RVM должен спросить вас, хотите ли вы доверять файлу .rvmrc;просто следуйте инструкциям и введите yes, когда спросят.Если подсказка не появляется, используйте следующую команду для доверия к .rvmrc:

    rvm rvmrc trust
    

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

    rvm_trust_rvmrcs_flag=1
    

    на ваш личный или системный rvmrc (~/.rvmrc и /etc/rvmrc соответственно).

  3. Попросите пассажира настроить среду RVM: Проинструктируйте пассажира загружать RVM и использовать набор гемов в вашем файле .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), вы должны быть готовы к работе.

Youследует отметить, что Пассажир может одновременно запускать только одну версию Ruby;если Passenger был настроен на что-то отличное от ree, вам, вероятно, придется переустановить Passenger и / или повторить созданный сценарий оболочки.

2 голосов
/ 28 ноября 2012

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

Сообщение об ошибке выглядит какниже:

*** Phusion Passenger: no passenger_native_support.bundle found for the current Ruby interpreter. Compiling one...
# mkdir -p /Users/jerry/.rvm/gems/ruby-1.9.3-p194@xxx/gems/passenger-3.0.18/ext/ruby/ruby-1.9.3-x86_64-macosx
# cd /Users/jerry/.rvm/gems/ruby-1.9.3-p194@xxx/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'

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

1 голос
/ 05 сентября 2013

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

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

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

0 голосов
/ 02 июня 2014

Удалите файл config/setup_load_paths.rb для Пассажира 4. Он не нужен.

...