【问题标题】:Should I use GAE + Lift for my Scala based webapp?我应该为基于 Scala 的 web 应用程序使用 GAE + Lift 吗?
【发布时间】:2013-10-14 22:29:19
【问题描述】:

以前有人问过这样的问题 - 但现在所有的答案都已经过时了。

我期待着开发基于 Scala 的 web 应用程序。我知道这个问题可以分为两个,但我将它们作为一个发布,因为它们依赖于相同的上下文,并且依赖于所使用的托管平台和框架。

我已经阅读了多篇关于 Play 的(很棒的)辩论!和 Lift,但在 Play 之间找不到很好的比较! 2.1 和电梯。如何确定哪个更适合我的场景(社交网络网站)?

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

  1. 对actors的支持(我不确定Akka是否能帮助我们解决这个问题)
  2. 给定会话的请求由不同的 JVM 提供服务,而无需通知正在运行的应用程序
  3. 引用 David Pollak(Lift 的主要作者)的话:

尽管 Google 声称,GAE 速度很慢且不可扩展(我见过的每个人 与尝试扩展 GAE 应用程序的对话失败并消失了 别处)。 GAE 将您锁定在极其次优的存储中 机制。 GAE 是免费的,但 Stax 也是免费的,而且有很多便宜的 选项包括 SliceHost。接下来,您拥有 Amazon EC2 和 机架空间。所以,我还没有找到任何人使用 GAE 的充分理由。 如果没有充分的理由使用GAE,投入大量资源 围绕 GAE JVM 不兼容性进行编码(例如,没有新线程) 好像有点浪费。

如果我选择 GAE,另一个问题是 缺乏游戏! 2.1 支持。我仍然没有看到一个模块。另一个问题是将来难以迁移到其他数据库(虽然我听说迁移到 MongoDB 应该相对容易一些)。最坏的情况是退出 GAE 并使用 AppScale。

【问题讨论】:

  • 我喜欢这些问题并同意已经有很多关于它的讨论,似乎从来没有对这两个 Web 框架进行过主观比较。许多cmets似乎总是徒劳无功; “我试过 XXX 5 分钟,从前 - 不喜欢它 - 所以我改用 YYY。YYY 太棒了......选择 XXX 后果自负。YYY 获胜。”我目前正在学习自己玩,非常喜欢它。但是我从来没有给 Lift 任何东西,只是粗略地看了一眼——所以对于实际回答你的问题没有多大帮助。我很想阅读对 2 的主观评论
  • 关于 GAE,问题真的是,你为什么要 GAE?如果您想要一个免费/按流量计费的 Java Web 服务器,现在还有很多其他选择。如果你想要一些 GAE 特定的功能,那么你已经决定了。

标签: google-app-engine scala playframework playframework-2.0 lift


【解决方案1】:

我个人使用LiftCloudbeesMongoLab 作为我大部分项目的首选。我尝试了几种云托管服务都无济于事(尤其是 Heroku 和 RedHat。由于您已经引用了 David Pollak 的帖子,我认为我没有尝试过 GAE)。要使用 cloudbees,您只需要一个 sbt plugin。然后就像运行cloudbees-deploy 目标一样简单。不到一分钟,您的代码就会启动并运行。我被它的简单程度吓到了。我选择 Mongo 主要是因为这个出色的 g8 template(注意,现在有一个 SQL equivalent

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

至于 Lift,我无法与 Play 相比。我下载/安装了 play 并立即被 MVC 关闭。我觉得视图优先的方法,虽然对我来说很陌生,但似乎是构建 Web 应用程序的一种更直观、更强大的方法。我喜欢 Lift 不会掩盖我确实在开发 Web 应用程序这一事实。我经常觉得 MVC 框架试图让所有的 HTML/CSS/JS 等保持一定的距离。

【讨论】:

  • Lift 似乎没有任何可重用的模块(比如这里提到的身份验证等:playframework.com/documentation/2.1.x/Modules)。另外,开发速度虽然不错,但似乎比 Play! 慢。我对吗 ?我还想知道我是否想要公开后端 API(比如移动应用程序),是否有使用 Lift 的简单方法(我什至不知道 Play 是否有帮助)——就像 GAE 提供了一个“后端 API”非常快发展。
  • @Raj,Lift 的弱点之一是它的文档。因此,您可能会觉得功能不可用或者某些事情比实际情况更困难。 Lift 有一个非常活跃的社区,在其邮件列表中挂出:groups.google.com/forum/#!forum/liftweb。虽然我不能谈论相对的发展速度,但两者都得到了非常积极的维护。有一个用户贡献的模块列表:assembla.com/wiki/show/liftweb/Modules,列表中经常讨论其他用户贡献。
  • 对于 API 开发,Lift 通过使用其RestHelpersimply.liftweb.net/index-Chapter-11.htmlsimply.liftweb.net/index-5.4.html 提供了一种实现后端API 的非常简单的方法。我已经大量使用它并且发现它很容易,尽管您的里程可能会有所不同。一种常见的使用场景是将 Lift 与 AngularJS 等前端库一起使用,它将大量使用 REST。在 Lift 3 中,围绕该场景将有许多新功能(除了其他开发之外) - 包括流式承诺:blog.goodstuff.im/roundtrip_promises
  • 感谢您提供所有详细信息。我有点倾向于玩!因为 Java 支持(以防我需要其他不了解 Scala 的团队成员);但是电梯帮助我更好地开始。您能否分享您对此后续问题的经验:stackoverflow.com/questions/19343286/…?谢谢!
【解决方案2】:

这个问题很开放,所以我将分享我关于 Scala Web 应用程序开发的经验和意见,因为它可能会帮助您做出决定。

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

http://www.scalatra.org/

Typesafe (http://typesafe.com) 似乎选择了 Play 框架,因此对于我的下一个基于 scala 的网络应用程序,我可能会选择 Play。我一直在阅读的关于 Play 框架的书是“Play for Scala”。本月(2013 年 10 月)刚刚发布。

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

我的印象是,Lift 是过去的首选框架,但现在已转向 Play 框架。

【讨论】:

  • 据我了解,Lift 继续使用 Typesafe,而不是 Typesafe 选择 Play。请在此处查看解释:quora.com/Lift-web-framework/… 我不会说 Play 是首选,但绝对似乎是来自 Java/MVC 世界的阻力最小的路径。 Lift 需要对 Scala 有更好的理解,并了解视图优先架构,但一旦你这样做了,我认为它与其他平台相比有很多优势,但最好的选择总是针对具体情况。
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 2011-03-02
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多