2013-09-28 3 views
7

Любые команды, которые используют sudo, похоже, не работают с RBenv.Использование rbenv не работает с sudo?

Я пытаюсь установить ActiveRecord, и это говорит, что у меня нет разрешения на запись, поэтому, когда я пытаюсь это:

ERROR: While executing gem ... (Gem::FilePermissionError) 
    You don't have write permissions into the /usr/local/rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 directory. 

Он говорит:

sudo: gem: command not found 

Как я могу обойти это?

+0

Похоже, вы установили rbenv в '/ usr/local/rbenv' вместо' ~/.rbenv'. У вас будет больше удачи с разрешениями, если вы установите их в домашний каталог пользователя. – Andrew

ответ

11

Идея таких инструментов, как rbenv и РВМ является то, что вам не нужно использовать sudo, потому что ваша всей среды Руби существует внутри вашего собственного рабочего пространства в песочнице.

RVM позволяет создавать многопользовательские конфигурации, хотя первоначально он был предназначен для одиноких пользователей.

Насколько я когда-либо видел или читал, rbenv однопользовательский. Ни в коем случае не нужно использовать sudo для управления или изменения среды Ruby при использовании rbenv. Если вы это сделаете, что-то не так. Если вы попытаетесь использовать sudo, вы все испортите. Вы можете не узнать сразу, но в итоге что-то появится, и вам нужно будет изменить права собственности на файлы обратно к вам.

В Linux и Mac OS вы можете сделать это довольно легко с помощью:

sudo chown -R <your_user_name>:<your_group> ~/.rbenv 

Вы должны бежать, что в качестве sudo, потому что только супер-пользователь может изменить владельца файлов, находящихся в собственности корня. sudo повышает ваши привилегии, позволяя вам изменять эти вещи.

+1

Есть моменты, когда вы захотите использовать sudo, даже если у вас есть песочница. Например, вы хотите использовать chef-solo, установленный в качестве драгоценного камня, с помощью Ruby, управляемого rbenv. В RVM вы можете использовать rvmsudo для подобных действий. Я ищу альтернативу для rbenv. – rosenfeld

+0

Люди используют 'sudo rvm ...' и 'sudo rbenv ...', что не то же самое, что 'rvmsudo'. Первые два порождают всевозможные проблемы. Вот о чем этот вопрос и ответ. –

0

Мой ответ в "Installing Ruby 2.0 and Rails 4.0.0beta on AWS EC2" может быть вам полезен.

Короче говоря, пользователь root должен иметь в своей среде rbenv, чтобы использовать драгоценные камни, установленные rbenv. Это может быть сделано путем добавления следующего

# /etc/profile.d/rbenv.sh 
export RBENV_ROOT=/usr/local/rbenv 
export PATH="${RBENV_ROOT}/bin:$PATH" 
eval "$(rbenv init -)" 

Этого должно быть достаточно для sudo работать. Если вы пишете сценарий оболочки, вам может потребоваться использовать

. /etc/profile.d/rbenv.sh 

перед использованием исполняемых файлов из других драгоценных камней.

+1

Проблема с этим подходом заключается в том, что когда «rbenv init -» оценивается как пользователь root, он будет изменять каталог rbenv/shims и тем самым изменить права собственности на root. Затем, когда одна и та же команда запускается пользователем, она будет терпеть неудачу с ошибкой, запрещенной разрешением. Аналогичные проблемы возникают при установке рубиновых версий и/или драгоценных камней в качестве root. – jpadams

2

сейчас я понимаю, что это своего рода старый, но это может помочь людям в будущем:

rbenv-Судо плагин для rbenv, что позволяет запускать rbenv предоставленные рубины и драгоценные камни из в Судо сессия.

https://github.com/dcarley/rbenv-sudo

-1

Мой ответ немного поздно, но у меня есть простое решение этой проблемы. Используйте символические ссылки, чтобы иметь возможность использовать binstubs и другие вещи Ruby.

ln -s ~/.rbenv/bin/rbenv /usr/local/bin/rbenv 
ln -s ~/.rbenv/shims/* /usr/local/bin 

Я надеюсь, что это поможет другим пользователям, имеющим ту же проблему.

+0

rbenv управляет созданием ссылок на исполняемые файлы, созданные драгоценными камнями. См. Https://github.com/rbenv/rbenv#rbenv-rehash. Если rbenv настроен правильно, нет необходимости размещать ссылки в/usr/local вообще, поскольку PATH должен указывать на нужное место. –

Смежные вопросы