2009-12-04 10 views
9

Mam ruby ​​web app, który używa lilypond do generowania muzyki opartej na danych wprowadzanych przez użytkownika. Chciałbym przenieść hosting do heroku (ostatnio użyłem heroku w kilku projektach i bardzo mi się spodobało, a mój ruch jest na tyle niski, że byłby darmowy host na heroku, przynajmniej przez jakiś czas). Jednak architektura dyna heroku nie pozwala na ssh i instalowanie pakietów, które chcesz ... zamiast tego, dajesz mu manifest gems, a on zainstaluje klejnoty dla Ciebie.Pakowanie prekompilowanych plików binarnych wewnątrz klejnotu

Tak więc, jeśli mam zamiar wdrożyć do heroku, będę musiał pakiet lilypond jako klejnot. Wydałem kilka klejnotów z czystym rubinem, ale nie miałem do czynienia z natywnymi rozszerzeniami lub prekompilowanymi binariami, ani czymś podobnym.

Czy można wziąć prekompilowane pliki binarne i umieścić je wewnątrz klejnotu? Idealnie byłoby uwzględnić binarki dla OS X (na którym się rozwijam) i debian linux (który działa na heroku), i zainstalowałbym właściwy plik binarny, gdy klej został zainstalowany.

Odpowiedz

1

Zamiast prekompilacja, powinieneś być w stanie po prostu listy gem w pliku .gems, zobacz Heroku documentation. Oczywiście wymaga to, aby twój klejnot prawidłowo budował natywny kod - to wciąż jest zadanie, ale mam nadzieję, że łatwiejsze.

1

Chyba masz kilka opcji tutaj:

Można uzyskać LilyPond source i pakować go do klejnotu z native rozszerzenia C. Istnieje kilka przydatnych przewodników, w jaki sposób to zrobić przy http://guides.rubygems.org/c-extensions/ i http://patshaughnessy.net/2011/10/31/dont-be-terrified-of-building-native-extensions

Jest też klejnot zwany gitara ale nie byłem w stanie znaleźć żadnych informacji na temat używania go na Heroku. Może warto wysłać e-maila do autora i zapytać, czy on o tym wie.

Możesz utworzyć Heroku buildpack, który instaluje Lilypond jako część twojego wdrożenia. Nie mogłem znaleźć żadnego dla Lilypond, ale jest mnóstwo przykładów, które robią podobne rzeczy - na przykład, this one instaluje Imagemagick (który jest domyślnie włączony na Heroku, więc prawdopodobnie już nie jest potrzebny - ale mam nadzieję, że kod jest pomocny) . Więcej dokumentacji na https://devcenter.heroku.com/articles/buildpack-api i https://devcenter.heroku.com/articles/buildpack-binaries

podstawie mojego czytania, myślę opcja buildpack jest najlepszym sposobem, aby przejść.

Mam nadzieję, że to pomoże!

Powiązane problemy