Упаковка Ruby или Python приложений для распространения? - PullRequest
4 голосов
/ 04 апреля 2009

Есть ли хорошие варианты , отличные от , кроме JVM, для упаковки приложений Python или Ruby для распространения среди конечных пользователей? В частности, я ищу способы, чтобы иметь возможность писать и тестировать веб-приложение, написанное на Ruby или Python, в комплекте с серверной базой данных, которое затем я могу обернуть в удобный набор платформенно-независимых пакетов. (какого-либо типа) для развертывания в Windows, Linux, OS X и FreeBSD?

Редактировать: Под веб-приложением я подразумеваю веб-приложение, которое конечные пользователи могут запускать на серверах в своих компаниях, предоставляя веб-сервис своим конечным пользователям. Есть много способов сделать это на JVM через JPython или JRuby, но мне любопытно, есть ли не-JVM маршрут с альтернативными виртуальными машинами или интерпретаторами.

Ответы [ 5 ]

4 голосов
/ 04 апреля 2009

Для Python есть distutils , а у Ars Technica была довольно неплохая статья по упаковке кроссплатформенных приложений PyQt некоторое время назад. Это настроит вас так, чтобы вы могли, по крайней мере, объединять вещи в пакеты, которые могут быть развернуты на нескольких платформах, что является разумным для бесплатных вещей.

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

2 голосов
/ 04 апреля 2009

Я не уверен, что понимаю вас здесь. Вы хотите создать веб-приложение, которое вы хотите отправить конечным пользователям? Я не уверен, как это интерпретировать:

  • Вы хотите создать приложение с пользовательским графическим интерфейсом, которое использует сетевое подключение для сбора данных и локального сохранения некоторой информации в базе данных?
  • Вы хотите создать приложение типа RoR / Django, которое пользователи могут установить на веб-сервере, а затем получить доступ к своему собственному экземпляру через браузер?

Я не могу говорить с python, но вы можете использовать Shoes для создания и упаковки пользовательского графического интерфейса для Ruby (кроссплатформенный). Для упаковки приложения на основе веб-сервера / браузера с графическим интерфейсом, я думаю, что сообщество Ruby on Rails разработало некоторые инструменты для этого - возможно Capistrano - но, опять же, я не занимаюсь разработкой RoR.

1 голос
/ 10 августа 2011

Вы можете распространять приложение как виртуальную машину или создать установщик, который включает все зависимости, как ребята из GitHub для своей локальной версии.

1 голос
/ 05 апреля 2009

Вы не можете строго сделать это (создание одного установщика / исполняемого файла) обычным кроссплатформенным способом, потому что разные платформы используют разные исполняемые форматы. JVM полагается на то, что JVM для конкретной платформы уже установлена ​​на конечном компьютере; если установлен , а не , то ваш JAR не будет работать, если вы не установите JVM для конкретной платформы. Возможно, что еще более важно, любые сторонние пакеты Python, которые используют двоичные расширения, не будут хорошо работать с Jython, если они специально не выпущены в версии Jython, что необычно. (Я предполагаю, что аналогичная ситуация имеет место для пакетов Ruby, хотя у меня нет прямых знаний о них, и даже о том, как часто пакеты Ruby используют двоичные расширения ....) Вы сможете использовать весь диапазон Java библиотеки, но очень мало на пути к библиотекам Python / Ruby. Стоит также отметить, что версии языков JVM, как правило, отстают от стандартной версии, предлагая меньше языковых функций и реже исправления ошибок.

Если ваш код - чистый Python, то он уже кроссплатформенный, если на целевом компьютере уже установлен Python, как и в Java ... но, по крайней мере, в Windows, гораздо менее безопасно предполагать, что Python установлен чем предполагать, что Java установлена. Сторонние элементы (база данных и т. Д.), Скорее всего, также будут двоичными файлами для конкретной платформы. Ожидания пользователей относительно разумного процесса установки также значительно различаются для разных платформ - если ваше приложение использует сторонние библиотеки или инструменты, вам лучше включить их все для пользователей Windows, но пользователи * nix, как правило, более терпимы к загрузке зависимостей. (Однако ожидания того, что менеджер пакетов будет обрабатывать их автоматически, растут ...)

Действительно, если это стек приложений большого размера, и вы хотите иметь встроенный пакет, который может быть развернут практически на любом сервере, возможно, самый простой способ - распространить его как полный виртуальный VMWare. machine - программное обеспечение плеера бесплатное (по крайней мере для Windows и * nix, но я полагаю и для Mac), и оно позволяет вам создать выделенную систему Linux / BSD, которая уже полностью настроена специально для вашего приложения. (Я говорю Linux / BSD, потому что тогда вам не нужно беспокоиться о плате за лицензию ОС ...)

(Если это приложение меньшего размера, которое вы хотите разрешить запускать на существующем клиентском веб-сервере, то я подозреваю, что совместимость между операционными системами будет менее важной, чем совместимость с межсерверными серверами - в то время как Apache делает имеют версию для Windows, подавляющее большинство веб-серверов Windows используют IIS, и использование одного дистрибутива пакета (или даже одной версии вашего приложения), которое хорошо работает с обоими этими веб-серверами, вероятно, будет нецелесообразно.)

0 голосов
/ 26 декабря 2017

Попробуйте https://packager.io/, бесплатно, если ваш код общедоступен.

Цитирую свой сайт:

Распространение и установка современных веб-приложений - это боль. Мы автоматически упаковываем их, чтобы вам не пришлось. Packager.io является сервис, который автоматически упаковывает ваше приложение как DEB или RPM пакет, для ряда целевых дистрибутивов.

В настоящее время вы можете упаковывать приложения, написанные на Ruby, NodeJS или Go.

Процесс выглядит следующим образом:

  • Зарегистрируйтесь в своей учетной записи GitHub.
  • включите одно из ваших приложений, которое вы хотите упаковать.
  • каждый раз, когда вы загружаете новый код в свой репозиторий GitHub, на наших серверах запускается сборка. Вы также можете вручную запустить сборку из пользовательского интерфейса.
  • во время процесса сборки ваш код выбирается и проходит через список пакетов сборки, которые заботятся о получении всех зависимостей, требуемых вашим приложением, а затем генерируется пакет DEB или RPM и размещается в вашем собственном APT или YUM репозиторий.
  • Теперь вы можете войти на свои серверы и установить приложение с помощью простой установки apt-get или yum install.

Использование это так

my-app run ruby -v
my-app run rake db:migrate
my-app run console
#Inspect your application's logs:    
my-app logs
#Set configuration variables for your application:
my-app config:set DATABASE_URL=...
#Start/Stop/Restart the application, in a distribution-independent way:
my-app start|stop|restart [web|worker]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...