Пакетиране на предварително компилирани двоични файлове вътре в скъпоценен камък

Имам ruby ​​уеб приложение, което използва lilypond за генериране на ноти въз основа на въвеждане от потребителя. Бих искал да преместя хостинга на heroku (наскоро използвах heroku в няколко проекта и много ми хареса, плюс трафикът ми е достатъчно нисък, за да го хоствам безплатно на heroku, поне за известно време). Въпреки това, dyno архитектурата на heroku не ви позволява да влизате по ssh и да инсталирате каквито пакети искате...вместо това му давате манифест на скъпоценни камъни и той ще инсталира скъпоценните камъни вместо вас.

Така че, ако ще внедря в heroku, ще трябва да пакетирам lilypond като скъпоценен камък. Пуснах няколко чисти рубинени скъпоценни камъни, но не съм се занимавал с естествени разширения или предварително компилирани двоични файлове или нещо подобно.

Възможно ли е да вземете някои предварително компилирани двоични файлове и да ги опаковате в скъпоценен камък? В идеалния случай това ще включва двоични файлове за OS X (на които разработвам) и debian linux (което се изпълнява на heroku) и ще инсталира правилния двоичен файл, когато gem бъде инсталиран.


person Myron Marston    schedule 04.12.2009    source източник


Отговори (3)


възможно е, тъй като предварително компилираните двоични скъпоценни камъни за windows са норма. Погледнете компилатора на рейк, може би. също https://github.com/rdp/ruby_tutorials_core/wiki/gem (https://en.wikibooks.org/wiki/Ruby_Programming/RubyGems) може да помогне - r

person rogerdpack    schedule 04.12.2009

Мисля, че тук имате няколко възможности:

Можете да получите изходния код на Lilypond и да го опаковате в скъпоценен камък с родно C разширение. Има някои полезни ръководства как да направите това на http://guides.rubygems.org/c-extensions/ и http://patshaughnessy.net/2011/10/31/dont-be-terrified-of-building-native-extensions

Има и скъпоценен камък, наречен gitara, но не успях да намеря никаква информация за използването му в Heroku. Може би си струва да изпратите имейл на автора и да го попитате дали знае нещо за това.

Можете да създадете Heroku buildpack, който инсталира Lilypond като част от вашето внедряване. Не успях да намеря такива за Lilypond, но има много примери, които правят подобни неща - например този инсталира Imagemagick (който е включен по подразбиране в Heroku, така че вероятно вече не е необходим - но се надяваме, че кодът е полезен). Повече документация на https://devcenter.heroku.com/articles/buildpack-api и https://devcenter.heroku.com/articles/buildpack-binaries

Въз основа на моето четене мисля, че опцията buildpack е най-добрият начин.

Дано това помогне!

person Alex Ghiculescu    schedule 29.03.2013

Вместо предварително компилиране, трябва да можете просто да посочите скъпоценния камък във вашия .gems файл, вижте документацията на Heroku . Разбира се, това изисква вашият скъпоценен камък да изгради кода правилно - това все още е задача, но се надяваме по-лесна.

person rud    schedule 29.07.2010