Упаковка 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
Я так устал от этого, что решил сделать свое собственное решение. Через пару дней я наконец начал работать.
Это то, что мне было нужно, и, надеюсь, кто-то еще получит выгоду от этого!
Это очень просто: загрузите репо (которое довольно велико из-за двоичных файлов). Поместите его на 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 строить).