【问题标题】:Packaging Ruby or Python applications for distribution?打包 Ruby 或 Python 应用程序以进行分发?
【发布时间】:2009-04-04 04:52:53
【问题描述】:

除了 JVM 之外,还有什么好的选择其他用于打包 Python 或 Ruby 应用程序以分发给最终用户?具体来说,我正在寻找能够编写和测试用 Ruby 或 Python 编写的基于 Web 的应用程序的方法,并配有一个后端数据库,然后我可以将其封装在一组方便的独立于平台的包中(某种类型的)用于在 Windows、Linux、OS X 和 FreeBSD 上部署?

编辑: 我所说的“基于 Web 的应用程序”是指最终用户可以在其公司的服务器上运行的 Web 应用程序,在内部为他们的最终用户提供 Web 服务。有很多方法可以通过 JPython 或 JRuby 在 JVM 上执行此操作,但我很好奇是否存在带有备用 VM 或解释器的非 JVM 路由。

【问题讨论】:

  • 使用JVM打包Python或Ruby是什么意思?这将如何运作?
  • 有三个项目让您可以将 JVM 用作 Ruby、Python 和少量其他语言以及 Java(Groovy 和 Scala)的本机动态语言的备用 VM。跨度>
  • 如何使用 Jython “打包 Python 的好选择”?我不知道这有什么好处。请进一步解释。
  • 因为您可以轻松地将 Python 程序转换为单个 Java JAR,并从那里为每个主要平台利用大量 Java 部署选项。诚然,以使用世界上所有的 RAM 为代价(Java 喜欢拥有大量 RAM)。

标签: python ruby deployment


【解决方案1】:

对于 Python,有 distutils,而 Ars Technica 不久前在打包跨平台 PyQt 应用程序时有一个 pretty good article。这将使您进行设置,因此您至少可以将内容捆绑到可以部署在多个平台上的包中,这对于免费的东西来说是合理的。

如果您尝试分发专有代码,我不确定这是否真的比使用 JVM 更好。

【讨论】:

    【解决方案2】:

    我不确定我是否理解你的意思。您想创建一个基于 Web 的应用程序并将其发送给最终用户吗?我不确定如何解释:

    • 您想创建一个具有自定义 GUI 的应用程序,该应用程序使用网络连接来获取数据并将一些信息本地存储在数据库中?
    • 您想创建一个用户可以安装在网络服务器上的 RoR/Django 类型的应用程序,然后通过浏览器访问他们自己的实例?

    我不会说 python,但您可以使用 Shoes 为 Ruby(跨平台)创建和打包自定义 GUI。为了打包一个基于 webserver/browser-GUI 的应用程序,我认为 Ruby on Rails 社区已经为此构建了一些工具 - 可能是 Capistrano - 但话说回来,我并没有做很多 RoR 开发。

    【讨论】:

    • Capistrano 与基于 webserver/browser-GUI 的应用程序无关。
    • 仅通过阅读您提供的链接(针对 Capistrano),它似乎可以处理系统维护和跨一台或多台服务器自动执行繁琐的管理任务。在点击回复链接之前,您是否阅读了 Capistrano 主页上的介绍性文字?
    【解决方案3】:

    您不能以一般的跨平台方式严格执行此操作(创建单个安装程序/可执行文件),因为不同的平台使用不同的可执行格式。 JVM 依赖于在目标计算机上已经安装了特定于平台的 JVM;如果没有安装 一个,那么除非您以特定于平台的方式安装 JVM,否则您的 JAR 将不会运行。或许更重要的是,任何依赖二进制扩展的第三方 Python 包都不能很好地与 Jython 配合使用,除非专门在 Jython 版本中发布,这是不寻常的。 (我认为 Ruby 包也有类似的情况,尽管我对那里没有直接的了解,也不知道 Ruby 包使用二进制扩展有多普遍......)您将能够使用整个 Java 范围库,但很少使用 Python/Ruby 库。还值得注意的是,JVM 版本的语言往往落后于标准版本,提供的语言特性和错误修复频率较低。

    如果您的代码是纯 Python,那么只要目标计算机已经安装了 Python,它就已经是跨平台的,就像 Java 一样……但至少在 Windows 中,假设已安装 Python 是相当不安全的而不是假设已安装 Java。第三方元素(数据库等)也可能是特定于平台的二进制文件。用户对什么是合理的安装过程的期望也因平台而异——如果你的应用程序使用第三方库或工具,你最好为 Windows 用户包括所有这些,但 *nix 用户往往更容忍下载依赖关系。 (但是,对于包管理器自动处理的期望越来越高......)

    真的,如果这是一个大型应用程序堆栈,并且您希望能够拥有一个可以部署在几乎任何服务器上的嵌入式捆绑包,那么最简单的方法可能是将其作为完整的 VMWare 虚拟机分发机器——播放器软件是免费的(至少适用于 Windows 和 *nix,但我想也适用于 Mac),它允许您创建一个专门为您的应用程序完全配置的专用 Linux/BSD 系统。 (我说 Linux/BSD 是因为这样您就不必担心操作系统许可费用......)

    (如果您希望允许在客户端现有的网络服务器上运行它是一个较小的应用程序,那么我怀疑跨操作系统兼容性将比跨网络服务器兼容性更受关注——而 Apache 确实 有一个 Windows 版本,绝大多数 Windows 网络服务器都运行 IIS,并且拥有与这两个网络服务器都兼容的单个包分发(甚至是应用程序的单个版本)可能是不切实际的。)

    【讨论】:

    • 与下载 VMware(非开源)和下载完整的 VM 相比,安装 java 和运行 JAR 容易得多。但它作为虚拟机可能更可靠,具体取决于应用程序需要做什么,这可能是特定于平台的。
    【解决方案4】:

    您可以将应用程序作为虚拟机分发,也可以创建一个包含所有依赖项的安装程序,就像 GitHub 人员为他们的本地版本所做的那样。

    【讨论】:

      【解决方案5】:

      试试https://packager.io/,如果你的代码是公开的,它是免费的。

      引用他们的网站:

      分发和安装现代 Web 应用程序很痛苦。 我们会自动打包它们,因此您不必这样做。 Packager.io 是一个 自动将您的应用程序打包为 DEB 或 RPM 的服务 包,适用于许多目标发行版。

      目前,您可以打包用 Ruby、NodeJS 或 去吧。

      流程如下:

      • 使用您的 GitHub 帐户注册。
      • 启用您要打包的应用程序之一。
      • 每次将新代码推送到 GitHub 存储库时,都会在我们的服务器上启动构建。您还可以从用户界面手动启动构建。
      • 在构建过程中,您的代码被获取,并通过一个构建包列表运行,它负责获取您的应用程序所需的所有依赖项,然后生成一个 DEB 或 RPM 包,并托管在您自己的 APT 中或 YUM 存储库。
      • 您现在可以登录您的服务器,并使用简单的 apt-get install 或 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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-31
        • 2018-08-08
        • 1970-01-01
        • 2010-10-30
        • 1970-01-01
        • 2014-12-04
        • 1970-01-01
        相关资源
        最近更新 更多