Упаковка Ruby в переносимый исполняемый файл

Я пытаюсь найти хорошее решение для этого в течение длительного времени:

Есть ли безопасный способ установки ruby ​​в папку, переносимую на этой платформе? Я хочу иметь папку, которую я могу легко скопировать в дистрибутив, который я создаю, поэтому у меня может быть рубиновая среда "в пути". Это нормально, если мне нужно скомпилировать источник и прочее, пока я заканчиваю переносной рубиновой установкой.

Я нашел несколько ресурсов, которые пытаются решить это, но ни один из них не является удовлетворительным для меня.

Переносимая среда Ruby on Rails

http://hcettech.blogspot.pt/2012/05/windows-portable-rails-development.html

Для меня это серьезная болевая точка Ruby. Если работать с Ruby script невозможно, даже если клиенты сначала не устанавливают Ruby, тогда в моем случае рубин практически не подходит. Я действительно надеюсь, что я/мы сможем понять это, так что Ruby может быть намного полезнее, чем то, что уже есть.


Примечание. Я знаю такие вещи, как Releasy, но это еще не простой исполняемый файл ruby.

Моя цель - создать папку с .bat/.sh script, которая делает это:

#some bat/sh
./bin/ruby ./my_script.rb

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

Ответ 1

Я так устал от этого, что решил сделать свое собственное решение. Через пару дней я наконец начал работать.


Я представляю: Ruby Ship

Это то, что мне было нужно, и, надеюсь, кто-то еще получит выгоду от этого!

Это очень просто: загрузите репо (которое довольно велико из-за двоичных файлов). Поместите его на USB-накопитель или где хотите, затем выполните:

path/to/ruby_ship/bin/ruby_ship.sh -v
=> ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]

Что для linux и mac, или для окон:

path\to\ruby_ship\bin\ruby_ship.bat -v
=> ruby 2.1.2p95 (2014-05-08 revision 45877) [i386-mswin32_100]

Обертка ruby_ship действует так же, как ваш обычный рубин, поэтому вы можете перейти в script или сделать что-нибудь, что вы использовали бы обычную рубиновую команду для.

Если вам не нравится версия, поставляемая вместе с Ruby Ship, просто используйте compiling- script, который находится в каталоге 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.

В любом случае, надеюсь, что другие могут найти это полезным! Если что-то не работает для вас, пожалуйста, сделайте вопрос, и я рассмотрю его!

Ответ 2

Старый пост, но вы также можете проверить мое решение rb2exe. Он превращает рубиновые приложения в одиночные, переносные автономные исполняемые файлы.

Он поддерживает Rails и 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/

Ответ 3

Чтобы прояснить мое понимание вашей проблемы, вы хотите иметь возможность упаковывать Ruby вместе со своим script, все из которых содержится в одном каталоге. Что-то вроде:

.
├── bin
│   └── ruby
├── my_script.bat
├── my_script.sh
└── my_script.rb

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

Кроме того, вы упоминаете драгоценные камни, которые не поддерживают JRuby, поэтому вы можете использовать драгоценные камни с родными расширениями.

Нет инструмента, удовлетворяющего всем этим требованиям: (

Если вы хотели отказаться от использования собственных расширений и создать пакет на целевую платформу, вы можете:

  • создать автономную Windows, распространяемую с Ocra
  • создать пакет Debian с pkgr
  • создайте стандартный установщик OSX, который опирается на систему Ruby в OSX (хотя некоторый вопрос этой идеи)

Излишне говорить, что это потребует значительного количества накладных расходов, особенно если вы хотите полностью автоматизировать эти шаги и протестировать их как часть CI (которую я бы рекомендовал делать как smoke test в конце полного CI строить).