Ajout d'une application ruby in rails, rvm ou rbenv?

Bonjour,
Alors voilà, j’aimerai intégrer à un serveur Yunohost une application que je maintiens pour la gestion des bénévoles d’un cinéma itinérant d’art et essai.
C’est une application en Ruby on Rails qui depuis plusieurs années est hébergée sur un vps, avec rvm comme gestionnaire de version ruby, Postgresql pour la base de données, propulsée avec PushionPassenger et derrière Nginx.
Son dépôt est ici: https://framagit.org/rodinux/plannings_cinema

Comment puis-je l’adaptée à un serveur Yunohost ?
J’ai regardé un peu des scripts d’application comme Discourse ou Mastodon qui utilisent aussi Ruby on Rails sur le dépôt de YunohostApps, j’ai plusieurs questions:

  • Souvent le gestionnaire de version est plutôt rbenv. Dois-je adapter l’application pour qu’elle soit compatible avec rbenv plutôt ? ou je peut garder rvm ?
  • Y-a-t-il déjà dans les helpers de Yunohost un script qui installe rvm ou rbenv ?
  • J’ai utilisé Passenger pour propulser l’application, faut-il faire autrement avec Yunohost ?
  • Dois-je ré-écrire l’installation comme une application Ynh en lisant bien les protocoles et scripts ? Il me semble que oui en lisant Packaging d’applications,
  • Est-ce que my_webapp_ynh peut être utilisé à cet effet ? Je ne suis pas sûr vu les dépendances qu’il me faut…
  • Depuis quelques mises à jour, j’ai intégrer le dépôt yarn pour node.js, c’est possible de le garder ? ou bien Yunohost prévoit un autre dépôt pour node.js ?
  • Je n’ai pas installer Capistrano pour Rails, devrais-je le faire pour faciliter la tâche ?

Bref, j’ai l’impression que je vais devoir refactoriser tout mon code… J’ai un peu peur du boulot que cela va me demander…

Pour les Helpers, oui il y en a un en experimental:
https://github.com/YunoHost-Apps/Experimental_helpers Qui s’appelle ynh_install_ruby

my_webapp propose juste php&mysql pour l’instant.

Je te conseille de faire l’install nodejs avec le helper dédié: les helper officiels : YunoHost • index

Ca dépend, techniquement tu n’es pas obligé de faire un paquet tu peux très bien installer “à la main” comme dans une debian classique, il faut juste gérer l’ouverture du SSO en plus.

Certains helper peuvent même fonctionner en dehors d’un script yunohost en faisant : source /usr/share/yunohost/helpers

Merci pour vos réponses. Il faut que je m’habitue à rbenv.
Du coup, juste une question bête, j’ai intérêt à créer un utilisateur du nom de l’application et à installer rbenv dans le dossier home de cet utilisateur ?
Ou plutôt comment puis-je créer un utilisateur et groupe au nom de l’application ?
Je crois avoir trouvé avec cette commande:
sudo ynh_system_user_create --username=plannings_cinema --home_dir=/var/www/plannings_cinema --use_shell

mais ces commandes demandes demande d’appeler les helpers, c’est ça ?

Bon, je comprends qu’il ne faut pas utiliser sudo…
par contre, j’ai une erreur avec cette commande:

    + use_shell=1
    + home_dir=/var/www/plannings_cinema
    + ynh_system_user_exists plannings_cinema
    + local legacy_args=u
    + args_array=([u]=username=)
    + local -A args_array
    + local username
    + ynh_handle_getopts_args plannings_cinema
    + set +o xtrace
    + echo '! Helper used in legacy mode !'
    + set +x
    + getent passwd plannings_cinema
    + '[' -n /var/www/plannings_cinema ']'
    + local 'user_home_dir=--home-dir /var/www/plannings_cinema'
    + '[' 1 -eq 1 ']'
    + local shell=
    + useradd --home-dir /var/www/plannings_cinema --system --user-group plannings_cinema
    -bash: useradd : commande introuvable
    + ynh_die '--message=Unable to create plannings_cinema system account'
    + local legacy_args=mc
    + args_array=([m]=message= [c]=ret_code=)
    + local -A args_array
    + local message
    + local ret_code
    + ynh_handle_getopts_args '--message=Unable to create plannings_cinema system account'
    + set +o xtrace
    + ret_code=1
    + echo 'Unable to create plannings_cinema system account'
    Unable to create plannings_cinema system account
    + exit 1
    déconnexion
    ++ '[' 1 = 1 ']'
    ++ '[' -x /usr/bin/clear_console ']'
    ++ /usr/bin/clear_console -q
    Connection to yunohost.test closed.

Est-ce parce qu’il me faut d’abord créer le dossier ?
ou être root, sudousers n’a pas les droits de useradd
Bon j’arrête, car je vais polluer le fil si j’écris toutes mes étapes et je vais avoir plusieurs problèmes à affronter, peut-être en utilisant plutôt le fil irc…

Je me mélange les pinceaux sur les permissions… Qu’est ce qui est judicieux ? installer rbenv avec l’utilisateur admin ou avec l’utilisateur root ? Si je le fais avec l’utilisateur admin (ce qui me semble raisonnable, je n’aime pas bien faire les commandes en root), comment pouvoir utiliser la commande:
sudo -u plannings_cinema -H bash -l
utile pour la suite ? Cette commande fonctionne en root mais pas avec l’utilisateur admin…
Sinon, j’en suis à avoir créer un dossier pour l’application plannings_cinema et en root cette commande:
ynh_system_user_create --username=plannings_cinema --home_dir=/var/www/plannings_cinema --use_shell
Et là j’essaie d’installer rbenv depuis l’utilisateur admin en suivant ce topic: https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rbenv-on-ubuntu-14-04
… Je ne suis pas sûr de mes étapes…

Pas facile… en gros, je peux ajouter à la main un dossier /etc/yunohost/apps/plannings_cinema et y éditer un settings.yml ? Non, je pense que c’est des scripts qui font cela… Ou comment je fais pour expliquer à yunohost que j’ajoute une application ??
Je ne sais plus comment m’y prendre…
Pour Pushion Passenger, je comprends qu’il faut un user du nom de l’app dans nginx… Peut-être que je dois envisager que l’application puisse fonctionner sans Passenger ? Est-ce que je dois continuer à vouloir utiliser Pussion Passenger ? ou pas, mais comment propulser alors l’application ? avec Puma simplement ?
Pour rbenv, c’est l’utilisateur admin qui a les droits d’exécution dans son .bash_profile, mais comment me connecter avec l’utilisateur de l’application (du nom de l’application) et lui donner le droit d’exécuter rbenv ?
J’ai tenté de mettre ceci avec visudo
`

admin ALL = (plannings_cinema) /usr/bin/whoami

Mais ce ne doit pas être la solution.

Comment je résout ses problèmes de permissions entre admin root et l’utilisateur du nom de l’application ?

Si je pouvais au moins faire cette commande depuis admin
sudo -u plannings_cinema -H bash -l
Mais j’ai réalisé que l’utilisateur admin n’est pas dans le groupe sudo, mais dans le groupe admins… Je ne comprends pas bien…
Ou bien je dois considérer que l’application appartient à root ? mais je ne suis pas sûr que ce soit une bonne idée…
Bon, j’ai finalement ajouter le groupe sudo à l’utilisateur admin… Mais j’imagine que ce n’est pas non plus une bonne idée…
Ou bien, je vois une autre façon d’installer rbenv avec plusieurs utilisateurs du moment qu’ils sont ajoutés à un groupe créer rbenv : https://blakewilliams.me/posts/system-wide-rbenv-install

Comment appelez les Experimental_helpers ?

Hello, j’essaye toujours de comprendre… Si je veux installer à la mano l’application et utiliser des helpers, il faut que j’édite auparavant un fichier settings.yml dans le dossier /etc/yunohost/apps/nom_application. C’est bien ça ? je peux l’editer bêtement en prenant exemple sur d’autre ? Je dois ajouter quoi comme fichier encore ?? J’en suis à me dire que j’arriverai plus vite à coder une app yunohost (ce que j’ai commencé à faire) en prenant des exemples d’apps qui utilisent Rails aussi (Diaspora, Peertube…), sauf qu’elles ont toutes leurs particularités, je dois adapter. Cette application utilisait Passenger et rvm, la je m’habitue à rbenv et je me demande si elle peut être simplement propulsée par Puma ?
Par contre les exemples que je trouve sur des apps de Yuno avec Rails n’utilisent pas de commande RAILS_ENV=production rake secret
Je ne me suis pas faciliter la tâche, car je n’ai pas utiliser ni Unicorn, ni Capistrano pour cette application… C’est peut-être plus simple et judicieux ??
Elle a démarré avec une version 2.2.0 de Rails en 2015, pour dire…
Je pense que je devrai essayé en installant aussi le plugin rbenv-vars…
Je crois que j’en ai pour un moment. Si vous avez le temps de me conseiller, ce serait un pur bonheur…

Bonjour, je suis toujours en train de tester en local avec virtuzalbox avec une app sur un dépôt créer à cet effet ici :
https://git.rodinux.fr/gitea/My-Yunohost-Apps-tests/plannings_cinema_ynh
Je n’y arrive toujours pas, mais ça avance (je crois), voici un log d’erreur…
https://paste.yunohost.org/raw/ejohesalil
Vous pouvez m’aider ? @yalh76, je me suis inspiré pas mal d’apps que tu maintiens ou maintenait… Petit à petit je vois où ça coince, mais c’est pas gagner encore…
Là où je coince, c’est pour créer la clé en production avec RAILS_ENV=production rake secret et la sauvegarder pour la coller dans le fichier /conf/secrets.yml.

J’essaie ceci dans la procédure d’installation:

secret=$(RAILS_ENV=production rake secret)
ynh_replace_string --match_string="  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>" --replace_string="  secret_key_base: $secret" --target_file="$config/secrets.yml"

Pas terrible ?

Bon, je viens de comprendre que depuis les versions 5.2 et 6 de rails est utilisé une autre technique pour les clés avec rails credentials:edit… je vais tenter de rectifier le tir…
tir…

Humm… je me rapproche du résultat voulu…
yunohost log display 20201003-182526-app_install-plannings_cinema --share
Mais j’ai une commande qui ne va pas, dans mon script install, j’essaie ceci:
ynh_add_config --template="../conf/master.key" --destination="$final_path/congif/master.key", mais ça ne semble pas fonctionner… le template est un fichier master.key que j’ai mis dans le dossier conf de planning_cinema_ynh. Comment je doit écrire correctement cette étape ?