小编Ole*_*ann的帖子

Elixir:如何获取Ecto查询的当前日期?

我不得不问这个有点开玩笑,但目前还不清楚最好的方法是什么.所以这可能会变得有点咆哮.但我觉得Elixir在这里缺乏认真态度.

我发现当前日期再次在Ecto中查询当前日期非常复杂.比如像get me every record where date column x contains a date before t.

截至目前,我使用Erlangs :calendar.universal_time(),将其传递给Ecto.DateTime.from_erl那个Ecto.Date.cast.

date = :calendar.universal_time() |> Ecto.DateTime.from_erl |> Ecto.Date.cast
Run Code Online (Sandbox Code Playgroud)

请注意,我们还必须模式匹配实际日期,因为我们返回一个元组

{:ok, #Ecto.Date<2016-10-25>}
Run Code Online (Sandbox Code Playgroud)

就是这样

{:ok, date} = :calendar.universal_time() |> Ecto.DateTime.from_erl |> Ecto.Date.cast
Run Code Online (Sandbox Code Playgroud)

当然我可以使用,Ecto.Date.cast!但这又是你必须找到的东西,可能有一些我不知道的缺点.

然后我可以构建查询.但每次我必须至少调用3个函数...

query = from m in Model, select: {m.name, m.email}, where: (m.canceled_to > ^date), order_by: [desc: m.inserted_at]
result = Repo.all(query)
Run Code Online (Sandbox Code Playgroud)

那么有没有更好的方法让我失踪?

elixir ecto

3
推荐指数
1
解决办法
1461
查看次数

JS中的URL编码,用于有意义的URL和Rails页面缓存

我正在运行一个Rails应用程序,此时会获得大量流量,因此我开始使用页面缓存来提高性能.到目前为止,一切都像一个魅力.但是当我试图缓存搜索结果时,我遇到了一个奇怪的问题.

我的方法:

  • 使用有意义的网址进行搜索和分页(/ search?query = term&page = 3变为/ search/term/3)
  • 使用Javascript提交表单 - 如果JS被禁用,它将回退到旧表单(这也适用于我的路由,但没有缓存)

我的代码:

// Javascript
function set_search_action() {
  window.location = '/search/' + escape(document.getElementById('query').value);
  return false;
}

// HTML
<form action="/search" id="search_form" method="get" onSubmit="return set_search_action();">
  <input id="query" name="query" title="Search" type="text" />
  <input class="submit" name="commit" type="submit" value="Search" />
</form>
Run Code Online (Sandbox Code Playgroud)

问题

一切都适用于单词,如"term".但是当我搜索"term1 term2"时,表单将提交到/ search/term1 term2 // search/term1 term2/1.它应该提交到/ search/term1 + term2这就是我认为JS转义函数应该做的事情.

到目前为止,它也适用于开发模式中的空间.但我想在启用缓存的生产模式下它将成为一个问题(URL不应包含任何空格).

关于我做错了什么的任何想法?谢谢!

javascript caching escaping ruby-on-rails urlencode

2
推荐指数
1
解决办法
1236
查看次数

如何从一系列管道函数中捕获一个值?

假设我有这个功能链

%{key1: "value 1", key2: "value 2"}
|> CustomModule.func1
|> CustomModule.func2
|> CustomModule.func3
Run Code Online (Sandbox Code Playgroud)

如何将返回值分配给变量final_result,然后在case语句中使用它或进一步测试?

elixir phoenix-framework

2
推荐指数
1
解决办法
96
查看次数

未为结构实现协议枚举。如何将结构转换为可枚举的?

我正在使用结构在 Phoenix/Elixir 应用程序中创建自定义模型。像这样:

defmodule MyApp.User do
  defstruct username: nil, email: nil, password: nil, hashed_password: nil
end

new_user = %MyApp.User{email: "email@example.com", hashed_password: nil, password: "secret", username: "ole"}
Run Code Online (Sandbox Code Playgroud)

为了将它与我的数据库适配器一起使用,我需要数据是可枚举的。结构显然不是。至少我收到这个错误:

(Protocol.UndefinedError) protocol Enumerable not implemented for %MyApp.User{ ...
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用理解来碰运气。这当然也不起作用,因为结构不可枚举(愚蠢的我)

enumberable_user = for {key, val} <- new_user, into: %{}, do: {key, val}
Run Code Online (Sandbox Code Playgroud)

如何将数据转换为可枚举的地图?

erlang elixir phoenix-framework

2
推荐指数
1
解决办法
2122
查看次数

Phoenix app中可能的DoS /是否有必要进一步消毒用户输入?

从理论上讲,可以通过在内存中创建太多原子来取消Phoenix/Elixir应用程序.由于原子不是垃圾收集,这可能会导致内存溢出.我可以想象,攻击者可能会使用用户输入(如通过表单/ REST API)来创建任意数量的原子,足以使应用程序崩溃.

当然凤凰卫视似乎已经做得很好.所以,如果我将其发布到测试应用程序:

POST /api/ddos HTTP/1.1
Host: localhost:4000
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

key=value
Run Code Online (Sandbox Code Playgroud)

并使用简单的控制器处理它:

def ddos(conn, params) do
    IO.puts(inspect(params))
    conn
    |> put_status(200)
    |> json  params
end
Run Code Online (Sandbox Code Playgroud)

iex的结果是

%{"key" => "value"}
Run Code Online (Sandbox Code Playgroud)

我是否需要采取更多预防措施来防止此类攻击?

security elixir phoenix-framework

2
推荐指数
1
解决办法
318
查看次数

Elixir for Data Science

我最近开始玩Elixir,一些模式让我想起了Python,它广泛用于数据科学项目.例如列表推导或匿名函数.

考虑到Elixir的高性能以及运行多个进程和处理异步任务的能力,我认为它非常适合数据科学项目.

我错过了一点吗?有人有经验吗?

python elixir data-science

2
推荐指数
1
解决办法
2455
查看次数

Angular/CLI:如何更改自动重新加载的端口?

据我所知,运行ng serveAngular应用程序时会调查开发服务器,以确定是否需要重新加载.该服务器预计将在端口4200上运行(默认).

我运行一个带有多个docker容器的开发环境,以保持良好和隔离.所以我的一些有角度的应用程序在不同的端口上侦 这似乎导致每隔几秒钟在我的浏览器控制台中出现以下错误消息:

zone.js:2744 GET http://localhost:4200/sockjs-node/info?t=1518533495440 net::ERR_EMPTY_RESPONSE
Run Code Online (Sandbox Code Playgroud)

我在哪里可以更改配置以将实时重新加载客户端指向正确的方向?angular-cli.json似乎没有做任何事情.

javascript angular-cli angular

2
推荐指数
1
解决办法
1372
查看次数

Dgraph:使用递归可以进行深度图遍历?

关于Dgraph关于图遍历的功能,我有几个问题.

假设我们有一个由post类型的节点组成的数据集.每个帖子都可以有n个帖子回复此帖子.这棵树的深度不受限制.

是否可以使用Dgraph从一个起始节点开始搜索所有叶节点并返回满足特定条件的所有叶子?

是否可以将深度限制设置为不会以巨大的数据集结束?

是否也可以找到满足特定条件的所有父节点的子节点?

最后:Dgraph中的边缘是否被指示?我可以在查询中包含它吗?

database graph-databases dgraph

2
推荐指数
1
解决办法
738
查看次数

如何在 JavaScript 中延迟重试异步函数?

我正在尝试从数据库中获取记录。由于竞争条件,当我第一次尝试获取记录时,记录可能甚至可能不存在。我如何将其包装在重试逻辑中而不发疯?我似乎太愚蠢了

  const booking = await strapi.query("api::booking.booking").findOne({
    where: {
      id: id,
    },
  });
Run Code Online (Sandbox Code Playgroud)

此代码应n延迟几t毫秒重试。谢谢并充满爱意。

我尝试过的:

async function tryFetchBooking(
  id,
  max_retries = 3,
  current_try = 0,
  promise
) {
  promise = promise || new Promise();

  // try doing the important thing
  const booking = await strapi.query("api::booking.booking").findOne({
    where: {
      id: id,
    },
  });

  if (!booking) {
    if (current_try < max_retries) {
      console.log("No booking. Retrying");
      setTimeout(function () {
        tryFetchBooking(id, max_retries, current_try + 1, promise);
      }, 500);
    } else {
      console.log("No …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise async-await

2
推荐指数
1
解决办法
3663
查看次数

Angular 2:找不到名称'encodeUri'

我正在尝试用来http.get调用远程URL.我将搜索字符串附加到基本URL.此搜索字符串应为URL编码.但我得到这个错误:

找不到名字'encodeUri'

我该如何导入或使其可用?这是一个标准的Javascript函数,我在尝试使用Javascript的Math对象时遇到了同样的问题.

  search(term:string):any {
    let encoded_term:string = encodeUri(term);
    let url:string = [Config.API_BASE_URL, 'members', 'search', '?q=' + encoded_term].join('/');

    return this.http.get(url)
      .map(res => res.json())
      .map(res => {
        return this.buildPage(res);
      });
  }
Run Code Online (Sandbox Code Playgroud)

typescript angular

1
推荐指数
1
解决办法
1万
查看次数