24 votes

RVM et mince, racine vs utilisateur local

Donc, je vais essayer d'obtenir minces à exécuter en tant que service avec RVM. Après un thin install j'ai mis à jour manuellement, /etc/init.d/thin à utiliser un su - user lors de l'exécution de la commande config de sorte que mince était en cours d'exécution en tant qu'utilisateur local, plutôt que de la racine. So far So good.

Maintenant, quand j'essaie d' sudo service thin start on dirait qu'il essaie d'utiliser la non-RVM version de Ruby (1.8.7 qui a été installé sur la zone de départ) pour l'exécution de la commande. J'ai fait un gem install thin sur le non-RVM version, qui est ensuite m' uninitialized constant Bundler message—Bundler est installé uniquement dans le RVM de gemmes, pas le système de gemmes. Il semble que je ne peux pas obtenir le RVM de l'environnement mis en place (même si mon RVM script de démarrage est dans ~/.bashrc qui est ensuite inclus dans ~/.bash_profile).

Tout ce que je veux faire est d'exécuter mince comme un service utilisant le RVM de l'environnement, pas l'environnement du système. Est-ce même possible? Devrais-je abandonner et de commettre le péché ultime de l'exécution de tout, tant que root? Il est très tentant à ce point.

Merci pour toute aide!

81voto

Ola Tuvesson Points 2557

RVM est livré avec une pratique wrapper générateur qui crée un intermédiaire chargeur pour un init.d script. Cela vous permet de charger d'un service à l'aide d'une version de Ruby et sertie. Je l'utilise comme ceci (après l'installation de la mince gem):

1 - créer init.d entrée pour les minces

sudo thin install 

2 - configurer certains paramètres par défaut

sudo /usr/sbin/update-rc.d -f thin defaults 

3 - générer la configuration de démarrage de votre application rails

sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production

4 - générer rvm script

rvm wrapper <rubyversion>@<gemset> bootup thin

5 - Si vous utilisez un mondial sertie, vous pouvez simplement utiliser

rvm wrapper ruby-1.9.2-p125 bootup thin

6 - modifier mince init

sudo nano /etc/init.d/thin

7 - changer le chargeur d'origine

DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin

8 - point pour le rvm wrapper au lieu

DAEMON=/usr/local/bin/bootup_thin

9 - le démarrer

sudo service thin start

Si vous utilisez plus d'une application, il suffit de générer une configuration de démarrage de fichier yml pour chacun; lors de l'amorçage de minces tous yml fichiers dans /etc/mince/ sont analysées. Plus d'infos ici:

http://wiki.rubyonrails.org/deployment/nginx-thin?rev=1233246014 nb: Ceci est un lien vers une révision, la version la plus récente a été édité à être vide. Pensez regarder le lien sans l' ?rev=... dans l'url, la version actuelle peut être de retour, peut-être plus à jour.

HTH

2013 BONUS MODIFIER

Alors que je n'ai plus utiliser RVM dans la production, mince, c'est encore mon serveur de production de choix, et j'ai toujours utiliser les étapes 1 à 3 ci-dessus pour commencer. Mais la configuration par défaut il génère peut faire avec un peu de bricolage, voici quelques-unes des miennes:

Définir l'utilisateur et de groupe que mince s'exécute en tant que:

user: www-data
group: www-data

Supprimer le port config et passer à l'utilisation de sockets à la place (un peu plus rapide):

# port: 3000
socket: tmp/sockets/<appname>.sock

Dire mince pour redémarrer cas un par un, au lieu de fermer les tous avant de commencer à nouveau (rolling redémarrez-le):

onebyone: true

Donner le processus de serveur d'un "tag" pour vous aider à les identifier (en ps aux etc):

tag: <appname>

20voto

rbhughes Points 181

Un additif qui, nous l'espérons de gagner du temps: Ubuntu peut faire de drôles de choses avec sudo et les variables d'environnement. Si régulier sudo ne fonctionne pas, utilisez rvmsudo (en .rvm/bin):

rvmsudo mince installer

rvmsudo update-rc.d-f mince par défaut

5voto

Joel AZEMAR Points 1239

Une bonne pratique pourrait être de mettre l'application en service, plutôt mince pour être en mesure de démarrer des applications dans différents environnements tels une application en ruby 1.8.7 myapp1.8.7 et une autre application en ruby 1.9.2 myapp1.9.2

sudo nano /etc/init.d/myapp1.8.7

GARDEZ le chargeur d'origine

DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin

Dans le cas du démarrage à la place

$DAEMON -C /etc/thin/$NAME.yml start

et de le démarrer

sudo service myapp1.8.7 start

Fait la même chose avec l'app myapp1.9.2 et vous pouvez exécuter de nombreuses applications de façon autonome dans des environnements mixtes.

sudo service myapp1.9.2 start

0voto

Conor Points 41

pour une installation autonome une solution simple, j'ai ajouté les privilèges root à l'utilisateur pour "rvm exigences", puis supprimé les privilèges à l'aide visudo utilisateur ALL=(ALL:ALL) TOUS les

https://www.digitalocean.com/community/articles/how-to-add-delete-and-grant-sudo-privileges-to-users-on-a-debian-vps

Vos chances d'avoir le problème avec accès en lecture/écriture /usr/local/rvm

J'ai changé les autorisations pour tous les utilisateurs peuvent lire/écrire/exécuter;

en tant que root 'chomod a+xwr /usr/local/rvm/'

Vous obtiendrez des avertissements de RVM sur tous les utilisateurs ayant de lecture/écriture/exécution pour l'accès à ce dossier lors de la mise à jour des JOYAUX

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X