我们可以在没有源代码的情况下分发Ruby on Rails应用程序吗?

时间:2020-03-06 14:24:40  来源:igfitidea点击:

我想知道是否可以在没有源代码的情况下分发RoR应用程序供生产使用?我看过有关SO的帖子,但我的处境略有不同。这将是一个有一些线索的人管理的应用程序,因此我很酷,仍然需要在客户端安装Apache / Mongrel / MySQL。我真正想要的只是保护源。编码似乎是分发PHP应用程序的一种流行方法(例如:Helpspot)。

我发现了这些潜在的解决方案:

  • Zenobfuscate-但是不支持所有类型的Ruby代码,因此可以算出
  • Ruby Encoder-可能是最好的选择,因为他们的PHP编码器看起来还不错(但是我还没有尝试过),但是尚不可用。我以前曾将IONcube用于PHP,并且效果很好,但是IONcube似乎还没有兴趣。
  • 弹弓-在另一篇SO文章中提到过,但是它解决了一个不同的问题,并且仍然可见。
  • RubyScript2Exe-来自doco,尚不适合生产,因此可以将其计算在内。

我听说可能使用JRuby并分发字节码可能是实现此目的的一种方法,但是我从未使用过JRuby,所以不确定所涉及的是什么。

谁能提供任何想法和/或者已知示例?理想情况下,我也希望拥有某种自动构建方案。

解决方案

我们可以,但是它不会做任何事情来防止有人对它进行逆向工程或者修改。我记得有一篇文章介绍过类似的混淆Perl的尝试,以及调试器和5分钟的工作量如何有效地绕过它们。

如果我们迫不及待想要交付RubyEncoder,那么我认为ZenObfuscate是最有前途的。尽管可能需要对源代码进行一些修改,但他们确实在自己的网站上这样说:

ZenObfuscate costs 00 for a site license or is individually negotiable for other licensing schemes. Yes, that is expensive. That was on purpose. But don't let that thwart you too much. If your product is really cool and we want to see it succeed, we'll make it work. "Really cool" is not freecell.

当然,以2500美元(或者更高)的价格,我们希望对编译器进行一些调整,使代码库得到完全支持。让他们参与对话可能是值得的。

看一下JumpBox。

我已经与他们就该主题进行了交谈,他们似乎有一个可以很快在Rails应用程序中使用的解决方案。

如果我们发布了源代码,无论是被混淆还是以其他方式发布,应用程序都将被盗版。参见例如薄荷。这取决于我们要构建的内容,但我们可能会发现最好以多种混合形式发布该应用程序:具有明确定义的API的托管应用程序以及在客户服务器上运行的组件。只要我们产品的真正价值存在于服务器端,我们就无需混淆代码,我们只需发布未经修改的源代码即可。此外,这也可能使我们有机会接触正在运行PHP(而不是Ruby)的客户端。例如,请参阅Google Analytics(分析),HopToad,Scout等。

我们还可以查看ThoughtWorks工作室的Mingle,作为使用JRuby的示例。
这是一个Ruby on Rails应用程序,他们使用JRuby运行它。他们已经定制了jruby以加载加密的.rb文件。

现在最好的选择是使用JRuby。背景知识:我的公司(BitRock)与许多专有和商业开源供应商合作。我们帮助他们将通常基于PHP,Java或者Ruby以及网络服务器或者应用程序服务器(Apache,Tomcat),语言运行时和数据库(通常为Postgres,MySQL)的服务器软件打包到独立的,易于使用的安装程序。我们有很多基于PHP的客户(包括我们提到的HelpSpot),还有几个基于Rails的客户。对于RoR客户,通常是将JRuby与Tomcat或者Glassfish一起使用,尽管在某些情况下,我们还捆绑了本机Ruby解释器来运行依赖于尚未移植到JRuby的库的特定脚本(通常不是应用程序的核心) 。 JRuby已经迅速成熟,并且在许多情况下,它实际上比常规Ruby更快地运行其代码。我们还需要考虑,尽管将代码移植到JRuby非常简单,但是我们将需要花一些时间。我们可能想要检查JRuby Stack,它是我们入门所需的所有内容的免费安装程序。祝你好运!

我想知道我们是否可以使用RubyScript2Exe之类的工具将Ruby代码"编译"为可执行文件?

老实说,我还没有使用过它,但似乎它就是我们想要的,即使它只是将带有解释器的脚本打包到一个可执行文件中。