Что определяет, где драгоценные камни установлены? - PullRequest
1 голос
/ 23 декабря 2011

Я пытаюсь настроить приложение Sinatra на своем веб-хосте. У меня нет прав sudo для установки гемов по общесистемному пути, который находится в нескольких подпапках ниже /usr/local, но у меня есть папка gems в каталоге моего приложения.

Фон

Эта ссылка дает следующие определения:

  • GEM_HOME - «Каталог, содержащий главный репозиторий gem.»
  • GEM_PATH - «Список путей каталогов, содержащих репозитории gem, для поиска в дополнение к каталогу GEM_HOME. Список должен быть разделен соответствующим разделителем пути (например,«: »в Unix и«; »в Windows)»

Начальные настройки при входе в систему

Когда я впервые захожу по ssh на этот веб-хост, echo $GEM_HOME и echo $GEM_PATH оба выдают пустую строку, но gem list показывает несколько драгоценных камней.

Попытка изменить местоположение драгоценного камня

Из командной строки я установил GEM_HOME так:

GEM_HOME=$PWD/gems # 'gems' folder under present working directory
echo $GEM_HOME     # correctly outputs the gem folder I specified
ls $GEM_HOME       # shows gems folder contents, namely: 
                   # bin/ cache/ docs/ gems/ specifications/

Я также установил GEM_PATH в той же папке.

После этого gem list по-прежнему отображает глобальные драгоценные камни, а не драгоценные камни в указанной папке, и gem install все еще пытается установить в глобальное местоположение.

Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 23 декабря 2011

Использовать 'export'

Похоже, что export, как показал Тасс, было недостающим элементом: это делает мою локальную переменную GEM_HOME глобальной.

Вот что я сделал:

export GEM_HOME=$PWD/gems       # where to install and look for gems
export PATH=$PWD/gems/bin:$PATH # append the gems' binaries folder to
                                # the current path, so that I can call
                                # `bundle install` and have it find
                                # myapp/gems/bin/bundle
2 голосов
/ 23 декабря 2011

Для gem нет справочной страницы, что не облегчает задачу. Я предполагаю, что GEM_PATH - это место, где нужно искать драгоценные камни, а GEM_HOME - то, где их нужно устанавливать Попробуйте

export GEM_HOME = "$GEM_PATH"
1 голос
/ 23 декабря 2011

Вы также можете использовать Bundler. Bundler позволяет очень легко управлять версиями Gem, даже когда доступ sudo невозможен. Вы создаете файл с именем Gemfile в корне приложения и добавляете такие строки:

gem "sinatra"
gem "some_other_gem_dependency"
gem "and_so_on_and_so_forth", ">= 1.0"

А затем запустите bundle install --path /where/you/want/your/gems/stored, который установит драгоценные камни в путь, к которому у вас есть доступ. Затем вы положите это в свой config.ru:

require 'rubygems'
require 'bundler'

Bundler.require
require './your_app'
run YourApp

Проверьте http://gembundler.com/sinatra.html для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...