2009-12-04 12 views
9

J'ai un ruby ​​web app qui utilise lilypond pour générer des partitions en fonction de l'entrée de l'utilisateur. Je voudrais déplacer l'hébergement à heroku (j'ai récemment utilisé heroku sur quelques projets et je l'ai vraiment aimé, plus mon trafic est assez bas pour qu'il soit hébergé gratuitement sur heroku, pendant un moment au moins). Cependant, l'architecture dyno d'heroku ne vous permet pas d'entrer et d'installer les paquets que vous voulez ... à la place, vous lui donnez un manifeste de gemmes, et il installera les gemmes pour vous. Donc, si je vais déployer à heroku, je vais avoir besoin de paquet lilypond comme une gemme. J'ai sorti quelques gems en rubis pur, mais je n'ai pas traité d'extensions natives ou de binaires précompilés, ou quoi que ce soit de ce genre.Empaquetage des binaires précompilés à l'intérieur d'une gemme

Est-il possible de prendre des binaires précompilés et de les empaqueter dans une gemme? Idéalement, cela inclurait les binaires pour OS X (que je développe) et debian linux (qui est ce qui fonctionne sur heroku), et installerait le binaire approprié quand la gemme serait installée.

Répondre

1

Au lieu de précompilation, vous devriez être en mesure de ne citer que la pierre précieuse dans votre fichier .gems, consultez le Heroku documentation. Bien sûr, cela nécessite que votre gem construise le code natif correctement - c'est toujours une tâche, mais j'espère que c'est plus facile.

1

Je pense que vous avez quelques options:

Vous pouvez obtenir le LilyPond source et emballer dans un petit bijou avec une extension native C. Il y a des guides utiles sur la façon de le faire à http://guides.rubygems.org/c-extensions/ et http://patshaughnessy.net/2011/10/31/dont-be-terrified-of-building-native-extensions

Il y a aussi un petit bijou appelé gitara mais je n'ai pas été en mesure de trouver des informations sur l'utilisation sur Heroku. Il pourrait être utile d'envoyer un courriel à l'auteur et de lui demander s'il sait quelque chose à ce sujet.

Vous pouvez créer un Heroku buildpack qui installe Lilypond dans le cadre de votre déploiement. Je n'ai pas pu en trouver pour Lilypond, mais il y a beaucoup d'exemples qui font des choses similaires - par exemple, this one installe Imagemagick (qui est inclus par défaut sur Heroku, donc probablement pas nécessaire - mais j'espère que le code est utile) . Plus de documentation à https://devcenter.heroku.com/articles/buildpack-api et https://devcenter.heroku.com/articles/buildpack-binaries

Sur la base de ma lecture, je pense l'option buildpack est la meilleure façon d'aller.

Espérons que cela aide!