Упаковка Ruby в портативный исполняемый файл
Я уже давно пытаюсь найти хорошее решение для этого:
есть ли надежный способ установить ruby в папку, которая переносима на этой платформе? Я хочу иметь папку, которую я могу легко скопировать в дистрибутив, который я делаю, чтобы у меня была среда ruby "на ходу". Это нормально, если мне нужно скомпилировать источник и прочее, пока я получаю портативную установку ruby.
Я нашел несколько ресурсов, которые пытаются решить эту проблему, но нет меня это устраивает.
портативное Ruby на Rails среды
http://hcettech.blogspot.pt/2012/05/windows-portable-rails-development.html
для меня это главная болевая точка Ruby. Если невозможно заставить скрипт Ruby работать без того, чтобы клиенты сначала установили Ruby, то ruby в моем случае практически бесполезен. Я действительно надеюсь, что я / мы можем понять это, чтобы Рубин был намного полезнее чем то, что уже есть.
примечание: Я знаю такие вещи, как Releasy существует, но это все еще не простой исполняемый файл ruby.
моя цель состоит в том, чтобы иметь возможность сделать папку с a .bat/.sh скрипт, который делает это:
#some bat/sh
./bin/ruby ./my_script.rb
и да, сбейте меня, если есть что-то об этой проблеме, которую я не понял, так как это было бы облегчением для меня.
3 ответов
Я так устал от этого, что решил сделать свое собственное решение. Через пару дней у меня наконец-то получилось.
Я представляю: Рубиновый Корабль
это именно то, что мне нужно, и, надеюсь, кто-то еще получит выгоду от этого тоже!
Это очень просто: загрузите РЕПО (которое довольно большое из-за двоичных файлов). Поместите его на usb-накопитель или где угодно, а затем do:
path/to/ruby_ship/bin/ruby_ship.sh -v
=> ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
Это для linux и mac, или на windows:
path\to\ruby_ship\bin\ruby_ship.bat -v
=> ruby 2.1.2p95 (2014-05-08 revision 45877) [i386-mswin32_100]
оболочка ruby_ship действует так же, как ваш обычный ruby, поэтому вы можете передать сценарий или сделать все, что вы бы использовали обычную команду ruby.
Если вам не нравится версия, которая поставляется в комплекте с Ruby Ship, просто используйте скрипт компиляции, который находится в каталоге tools. Загрузите исходный код вашей любимой версии Ruby, скажем X. Y. Z, затем сделайте это:
# *nix (osx/linux/...)
path/to/ruby_ship/tools/ruby_ship_build.sh path/to/ruby-X.Y.Z.tar.gz
# windows
path\to\ruby_ship\tools\ruby_ship_build.bat path\to\ruby-X.Y.Z.tar.gz
Это создаст ваш вкус Рубина и правильно настроит обертки. Теперь вы Ruby версия X. Y. Z портативный! Скопируйте вставить эту папку, где вы хотите, и вы готовы пойти! Помните, что он будет компилироваться только для вашей текущей платформы, поэтому, если вам нужны другие платформы, скомпилируйте его на этих платформах.
процесс компиляции имеет несколько требований. посмотрите на сайт github.
В любом случае, надеюсь, что другие возможно, это будет полезно! Если что-то не совсем работает для Вас, пожалуйста, вопрос, и я буду смотреть в него!
старый пост, но вы также можете проверить мое решение rb2exe. Он превращает приложения ruby в одиночные, портативные, автономные исполняемые файлы.
Он поддерживает рельсы и Gemfile.
установка / использование:
gem install rb2exe
echo "puts 'Hello world'" > test.rb
rb2exe test.rb
./test
я объясню, что он делает, шаг за шагом, здесь:
http://www.learnwithdaniel.com/2016/08/ruby-to-portable-exe-app/
чтобы прояснить мое понимание вашей проблемы, вы хотите иметь возможность упаковать Ruby вместе с вашим скриптом, все содержащиеся в одном каталоге. Что-то вроде:
.
├── bin
│ └── ruby
├── my_script.bat
├── my_script.sh
└── my_script.rb
вы хотите, чтобы это работало на нескольких платформах - вы ссылаетесь на пакетные и Шелл-скрипты как на возможности, поэтому я предполагаю, что и *NIX, и Windows являются потенциальными целями. Это означало бы доставку нескольких специфичных для платформы двоичных файлов Ruby.
кроме того, вы упоминаете драгоценные камни, которые не поддерживают JRuby, поэтому возможно, вы используете gems с собственными расширениями.
нет инструмента, который удовлетворяет всем этим требованиям :(
Если бы Вы были готовы отказаться от использования собственных расширений и создать пакет для каждой целевой платформы, вы могли бы:
- создайте автономную Windows, распространяемую с помощью Ocra
- создайте пакет Debian с помощью pkgr
- создайте стандартный установщик OSX, который полагается на системе Ruby в OSX (хотя какой-то вопрос, что идея)
Излишне говорить, что это потребует значительных затрат, особенно если вы хотите полностью автоматизировать эти шаги и протестировать их как часть CI (что я бы рекомендовал сделать в качестве теста дыма в конце полной сборки CI).