代码之家  ›  专栏  ›  技术社区  ›  Don Werve

打包Ruby或Python应用程序以进行分发?

  •  4
  • Don Werve  · 技术社区  · 16 年前

    有什么好的选择吗 比JVM更适合打包Python或Ruby应用程序以分发给最终用户?具体来说,我正在寻找一些方法来编写和测试一个用Ruby或Python编写的基于web的应用程序,包括一个后端数据库,然后将其封装在一组方便的独立于平台的包(某种类型)中,以便在Windows、Linux、OS X和FreeBSD上部署?

    编辑: 我所说的“基于web的应用程序”是指最终用户可以在其公司的服务器上运行的web应用程序,在内部为最终用户提供web服务。在JVM上有很多方法可以通过JPython或JRuby来实现这一点,但是我很好奇是否有一个带有备用vm或解释器的非JVM路由。

    5 回复  |  直到 16 年前
        1
  •  4
  •   Todd Gamblin    16 年前

    distutils ,而阿尔斯·特尼卡 pretty good article 关于打包跨平台的PyQt应用程序。这会让你设置,这样你至少可以捆绑到包,可以部署在多个平台上,这是合理的免费东西。

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

        2
  •  2
  •   rampion    16 年前

    我不太明白你的意思。您想创建一个基于web的应用程序,并将其发送给最终用户吗?我不知道该怎么解释:

    • 你想创建一个RoR/Django类型的应用程序,用户可以安装在web服务器上,然后通过浏览器访问自己的实例?

    我不能和蟒蛇说话,但你可以用 Shoes Capistrano

        3
  •  1
  •   Jeff Shannon    16 年前

    您不能以一般的跨平台方式严格地做到这一点(创建单个安装程序/可执行文件),因为不同的平台使用不同的可执行文件格式。JVM依赖于目标计算机上已经安装了特定于平台的JVM;如果有的话 如果安装了一个,那么您的JAR将不会运行,除非您以特定于平台的方式安装JVM。也许更重要的是,任何依赖二进制扩展的第三方Python包都不能很好地与Jython配合使用,除非在Jython版本中特别发布,这是不寻常的。(我假设Ruby软件包也有类似的情况,尽管我不知道Ruby软件包使用二进制扩展有多普遍……)您可以使用所有的Java库,但很少使用Python/Ruby库。另外值得注意的是,语言的JVM版本往往落后于标准版本,提供的语言特性更少,错误修复也更少。

    (如果您希望允许它在客户机现有的Web服务器上运行的是一个较小的应用程序,那么我怀疑跨操作系统兼容性比跨Web服务器兼容性更重要——而Apache 如果有一个Windows版本,绝大多数Windows web服务器都运行IIS,并且有一个单独的包发行版(甚至是应用程序的一个版本)可以很好地与这两个web服务器一起使用,这可能是不切实际的。)

        4
  •  1
  •   Daniel Lopez    13 年前

        5
  •  0
  •   american-ninja-warrior    7 年前

    尝试 https://packager.io/ ,如果您的代码是公共的,则是免费的。

    我们会自动打包,这样你就不必了。包装商.io是一个 包,用于许多目标发行版。

    目前,您可以打包用Ruby、NodeJS或其他语言编写的应用程序

    过程如下:

    • 使用GitHub帐户注册。
    • 在构建过程中,您的代码被提取,并在构建包列表中运行,构建包负责提取应用程序所需的所有依赖项,然后生成一个DEB或RPM包,并托管在您自己的APT或YUM存储库中。

    用法是这样的

    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]