3

此类问题之前已经提出 - 但所有答案都已过时。我应该在我的基于Scala的web应用程序中使用GAE + Lift吗?

我期待着在基于Scala的webapp上工作。我明白这个问题可以分解为两部分,但是我将它们作为一个发布,因为它们依赖于相同的上下文,并依赖于所使用的托管平台和框架。

我已阅读Play上的多个(真棒)辩论!和Lift,但找不到比较Play! 2.1和Lift。我如何决定哪一个更适合我的场景(社交网站)?

同样,这个discussion有一些非常好的论点,如果我使用Lift的话,哪个平台可以使用,但它是从2010年开始的,似乎已经过时了。推荐的提供商(stax.net)已经死了(或者我想它已经与cloudbees.com合并了)。我个人倾向于对GAE,因为他们很快开始,但不能确定,如果问题仍然普遍存在:

  1. 支持演员(我不知道如果阿卡帮助我们解决这个问题)
  2. 请求一个给定的会议上通过不同的JVM被送达,恕不另行通知到运行的应用程序
  3. 引用大卫·波拉克(升降机的主要作者):

GAE是缓慢的,不可扩展,尽管谷歌的说法(大家我已经有210人用这种方式试图扩展GAE应用程序失败,并在其他地方执行了 )。 GAE会将你锁定在非常不理想的储存机制中。 GAE是免费的,但斯塔克斯也是免费的,并且有许多便宜的 选项,包括SliceHost。接下来,您将获得Amazon EC2和 RackSpace。所以,我没有找到任何人使用GAE的好理由。 如果没有充分的理由使用GAE,那么将大量资源 用于围绕GAE JVM不兼容性(例如,没有新线程)编码似乎是一种浪费。

如果我去GAE的另一个问题是缺乏发挥! 2.1支持。我仍然没有看到一个模块。另一个问题是难以将迁移到其他数据库(尽管我听说迁移到MongoDB应该相对更容易)。最糟糕的情况是退出GAE并使用AppScale。

+0

我喜欢这些问题,并且同意已经有很多关于它的讨论,但似乎并没有实际上对这两个Web框架进行主观比较。 许多评论似乎总是徒然的; “我尝试了XXX五分钟,曾经有一段时间 - 不喜欢它 - 所以我用YYY代替。YYY太棒了...选择XXX在你的危险中。YYY为胜利。” 我目前正在学习玩自己,很喜欢它。但我从来没有给过任何提示,只是粗略的一瞥 - 所以在回答你的问题时无法帮助你。 我很想阅读2 –

+0

Re GAE的主观评论,这个问题真的是,你为什么想要GAE?如果您想要一个免费/计量的Java Web服务器,那么今天还有许多其他选项。如果你想要一些特定于GAE的功能,那么你已经决定了。 – nafg

回答

5

我个人使用Lift,CloudbeesMongoLab作为我的大部分项目的首选。我尝试了几种云托管服务(尤其是Heroku和RedHat),我认为我没有尝试过GAE,因为David Pollak的文章已经提到过了。要使用cloudbees,您只需要一个sbt plugin。然后它就像运行cloudbees-deploy目标一样简单。一分钟之内,您的代码即可正常运行。我被这件事变得容易多了。我和Mongo一起去的主要是因为这个出色的g8 template(注意,现在有SQL equivalent

我真正喜欢Cloudbees和MongoLab的另一件事是他们都有免费服务。这对我来说很好,因为我在空闲时间只在这些项目上工作,所以我不想在我的想法不成熟时花钱。

至于电梯,我无法与Play比较。我下载/安装了游戏,并立即被它的MVC关闭。我觉得尽管我认为这种观点优先的方法似乎是构建Web应用程序的一种更加直观和强大的方法。我喜欢Lift如何不掩盖我实际上正在开发Web应用程序的事实。我经常觉得MVC框架试图保持所有的HTML/CSS/JS等。

+0

Lift似乎没有任何可重复使用的模块(如身份验证等,这里提到:http://www.playframework.com/documentation/2.1.x/Modules)。另外,开发速度虽然不错,但似乎比Play!慢。我对吗 ?我也想知道我是否会想要公开一个后端API(比如移动应用程序),Lift有没有一种简单的方法(我甚至不知道Play是否有用) - 就像GAE提供的“后端API”非常快发展。 – SlowAndSteady

+0

@Raj,Lift的弱点之一就是它的文档。因此,您可能会走开,并且认为功能不可用,或者某些事情比实际情况更困难。 Lift有一个非常活跃的社区,挂在邮件列表上:https://groups.google.com/forum/#!forum/liftweb。虽然我不能谈论相对发展速度,但都非常积极地维持。有用户贡献模块列表:https://www.assembla.com/wiki/show/liftweb/Modules,其他用户贡献通常在列表中讨论。 – jcern

+0

至于API开发,Lift通过使用RestHelper提供了一种实现后端API的简单方法:http://simply.liftweb.net/index-Chapter-11.html和http://。 liftweb.net/index-5.4.html。我已经大量使用它,并发现它很容易,但你的里程可能会有所不同。一个常见的使用场景是使用Lift与前端库(如AngularJS),后者将大量使用REST。在Lift 3中,除了其他开发之外,还会有许多新功能(包括流式承诺):http://blog.goodstuff.im/roundtrip_promises。 – jcern

2

问题是相当开放的,所以我会分享我的经验和意见有关Scala的Web应用程序开发,因为它可能会帮助你做出决定。

我使用Scalatra和Scalate使用Jetty作为服务器构建了我的第一个scala Web应用程序。该应用程序托管在亚马逊EC2实例上,并且我对此没有任何问题......它自2011年底以来一直在运行,只有一个小型点需要10分钟才能解决。我发现学习在Web应用程序中使用Scala是一种很好的体验。

http://www.scalatra.org/

类型安全(http://typesafe.com)似乎已经选择了游戏框架等我的下阶的基于Web的应用程序,我可能会去播放。我一直在阅读Play Framework的书是“Play for Scala”。它刚刚在本月发布(2013年10月)。

http://www.manning.com/hilton/

我的印象是,电梯是去到过去的框架,但是,这已经转移到了游戏框架。

+5

我的理解是,Lift通过Typesafe而不是Typesafe选择了Play。在这里看到一个解释:http://www.quora.com/Lift-web-framework/Why-did-Typesafe-select-Play-for-their-stack-instead-of-Lift/answer/David-Pollak我wouldn并不是说Play是最好的选择,但绝对似乎是来自Java/MVC世界的阻力最小的路径。 Lift需要对Scala有更好的理解,并让你的头脑看到第一个架构,但是一旦你做到了,我认为它与其他平台相比有很多优势,但是最好的选择将始终是特定于案例的。 – jcern

相关问题