首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳过AOT的原因?

跳过AOT的原因?
EN

Stack Overflow用户
提问于 2012-06-24 10:02:08
回答 1查看 3.8K关注 0票数 30

在许多黑色应用程序中,我看到了下面的声明。跳过aot的目的是什么?什么时候使用,什么时候不使用?有什么优点/缺点吗?

代码语言:javascript
复制
:main ^{:skip-aot true} sample-app.server
EN

回答 1

Stack Overflow用户

发布于 2013-03-12 19:42:09

这并不是特定于noir的,但是当您将代码部署到PaaS提供程序时,您可能希望跳过给定名称空间的AOT。

默认情况下,Heroku会对您的代码执行AOT编译,因此请考虑server.clj中的以下代码片段:

代码语言:javascript
复制
(db/connect! (System/getenv "DB_URL"))

(defn start [port]
  (run-jetty app {:port port :join? false :max-threads 100}))

原则上,这段代码似乎是无害的,无论它是不是AOT编译的,它都可以在本地工作。

然而,在heroku上编译期间,环境变量"DB_URL“还不可用,因此上面的connect!语句将尝试连接到nil并抛出异常。

跳过此命名空间的AOT编译是防止这种情况的一种方法。

另一种,也是我目前更喜欢的方法是稍微改变一下:

代码语言:javascript
复制
(defn bootstrap! []
  (db/connect! (System/getenv "DB_URL")))

(defn start [port]
  (bootstrap!)  
  (run-jetty app {:port port :join? false :max-threads 100}))

这样一来,您的意图就更清楚了,并且在编译过程中可以避免尝试数据库连接。

我通过艰苦的方式学到了这一点,并将其记录在this blog post中。

希望这是有用的。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11174459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档