Упаковка предварительно скомпилированных двоичных файлов внутри драгоценного камня - PullRequest
9 голосов
/ 04 декабря 2009

У меня есть веб-приложение ruby ​​ , которое использует lilypond для создания нот на основе пользовательского ввода. Я хотел бы переместить хостинг на heroku (я недавно использовал heroku на нескольких проектах, и он мне очень понравился, плюс мой трафик достаточно низок, чтобы он мог свободно размещаться на heroku, для какое-то время) Тем не менее, dyno архитектура heroku не позволяет вам подключаться и устанавливать любые пакеты, которые вы хотите ... вместо этого вы даете ему манифест гемов, и он установит гемы для вас.

Итак, если я собираюсь развернуться на героку, мне нужно будет упаковать лилипонд как драгоценный камень. Я выпустил несколько чистых рубиновых гемов, но не имел дело с собственными расширениями, скомпилированными двоичными файлами или чем-то в этом роде.

Можно ли взять несколько предварительно скомпилированных двоичных файлов и упаковать их в гем? В идеале это должно включать двоичные файлы для OS X (которые я разрабатываю) и Debian Linux (которые работают на heroku), и при установке gem будет установлен правильный двоичный файл.

Ответы [ 3 ]

3 голосов
/ 04 декабря 2009

возможно, так как предварительно скомпилированные бинарные гемы для окон являются нормой Посмотрите на компилятор граблей, возможно. Также http://wiki.github.com/rdp/ruby_tutorials_core/gem может помочь -r

1 голос
/ 29 марта 2013

Я думаю, у вас есть несколько вариантов:

Вы можете получить источник 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 как часть вашего развертывания. Я не смог найти ничего для Лилипонда, но есть множество примеров, которые делают подобные вещи - например, этот устанавливает Imagemagick (который включен по умолчанию в Heroku, поэтому, вероятно, больше не нужен - но, надеюсь, код полезен). Дополнительная документация на https://devcenter.heroku.com/articles/buildpack-api и https://devcenter.heroku.com/articles/buildpack-binaries

Исходя из того, что я прочитал, я думаю вариант сборки пакета - лучший путь.

Надеюсь, это поможет!

1 голос
/ 29 июля 2010

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

...