小编Jus*_*ood的帖子

类型系统中的强制Maybes

我有类似以下内容

data A = A
  { id :: Integer
  , foo :: Maybe String
  , bar :: Maybe String
  , baz :: Maybe String
  }
Run Code Online (Sandbox Code Playgroud)

这些数据作为JSON进入我的服务.当一个或多个的这种请求仅视为有效foo,bar或baz给出.有没有更好的方法在Haskell的类型系统中表达这一点?

注意:很遗憾,我无法提出这些单独的请求.我只是遵循一个定义的协议.

haskell

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

更新MAC上的ruby版本

我正在尝试更新ma ruby​​版本.我用ruby 1.8.7,我想安装2.1.0.我刚装了rvm,rbenv,brew和宝石.

但是当我尝试做的时候

$ rbenv install 2.1.0.
Run Code Online (Sandbox Code Playgroud)

我得到一个关于铿锵的错误.我不明白铿锵和红宝石之间的关系

请你帮助我好吗?

错误:

$ rbenv install 2.1.0
Downloading ruby-2.1.0.tar.gz...
Installing ruby-2.1.0...

BUILD FAILED
...
Last 10 log lines:
...
checking build system type... x86_64-apple-darwin12.3.0
checking host system type... x86_64-apple-darwin12.3.0
checking target system type... x86_64-apple-darwin12.3.0
checking for gcc-4.2... no
checking for clang... no
checking for gcc... no
checking for cc... no
./configure: line 3390: -E: command not found
configure: error: clang version 3.0 or later is required
Run Code Online (Sandbox Code Playgroud)

ruby macos ruby-on-rails

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

$ _SERVER ['REQUEST_URI']和标题('location:...')的任何安全问题;

我的网站有页眉,页脚和主要内容.如果用户未登录,则可以显示登录表单而不是实际内容.

在该登录表单上,我$_SERVER['REQUEST_URI']在会话变量中写入$_SESSION['redirect'].

我的登录表单posthandler将登录用户,将成功登录此链接后发送给用户 header('location: http://myserver.com'.$_SESSION['redirect']);

所以,如果我去myserver.com/somesite.php?somevar=10,它会显示正确的网站,如果你已经登录,否则会显示登录表单,但是在浏览器地址栏中的URL仍然说myserver.com/somesite.php?somevar=10 那你输入您的凭据,你会被重定向到myserver.com/somesite.php?somevar=10,这将然后 - 因为你现在已经登录 - 完全显示.

我不使用REQUEST_URI表单操作的值或链接href.

此外,任何$_GET我用我首先检查它们是否匹配正则表达式的变量(通常是变量将是一个sha1字符串或数字和字母而已,没有任何特殊字符的,否则随机生成的字符串),我总是使用准备好的语句,如果得到的变量用于db查询.

我的问题是,是否有任何安全问题?有任何方法可以利用它,在网址中输入恶意内容,然后将其发送给其他用户,例如......?我是否应该在某个过程中以某种方式逃避某些事情?

php security

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

emacs中的Ctrl-backspace删除太多

emacs中的ctrl-backspace会删除所有空白是很好的。但是,它并不止于此!它似乎只有删除至少一个单词后才会停止。例如,这意味着在这里使用它:

foo(bar)
    <cursor>
Run Code Online (Sandbox Code Playgroud)

结果是

foo(<cursor>
Run Code Online (Sandbox Code Playgroud)

哪个真傻(恕我直言)!我想要的行为类似于以下内容:

  1. 如果光标前面有空格,请删除所有空格(然后停止!)。
  2. 如果光标之前有一个单词,请删除该单词。
  3. 否则,删除光标之前的所有相邻重复字符。

这似乎是一个更合理的Ctrl-Backspace,但是老实说,如果我能得到(1),那将是一个巨大的改进。是否有用于此的包装或设置?我不太了解emacs lisp,但也许会指出相关API的位置...

emacs

5
推荐指数
2
解决办法
1306
查看次数

如何使用 Ecto 的 has_many 和 cast_assoc

我是 Elixir 和 Ecto 的新手,我需要一些有关 Ecto 的 has_many 和 cast_assoc 的帮助。无法理解基础知识,例如我如何使用关联模型创建新模型。

这是我的 Has_Model:

defmodule Example.Has_Model do
  use Ecto.Schema
  import Ecto.Changeset
  alias Example.Repo
  alias Example.Has_Model

  schema "has_models" do
    has_many :belong_models, Example.Belong_Model
    field :name, string
    timestamps
  end

  def changeset(has_model, params \\ %{}) do
    has_model
    |> cast(params, [:name])
  end
end
Run Code Online (Sandbox Code Playgroud)

这是 Belong_Model:

defmodule Example.Belong_Model do
  use Ecto.Schema
  import Ecto.Changeset
  alias Example.Repo
  alias Example.Belong_Model

  schema "belong_models" do
    belongs_to :has_model, Example.Has_Model
    field :name, string
    timestamps
  end

  def changeset(belong_model, params \\ %{}) do
    belong_model
    |> cast(params, …
Run Code Online (Sandbox Code Playgroud)

elixir ecto

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

检测 Ecto DB 查询超时

当 Ecto(或 postgrex?)遇到数据库查询超时时,我想返回一个特定的错误响应(带有自定义消息的 HTTP 503)。

发生超时时,抛出的异常如下所示:

** (DBConnection.ConnectionError) tcp recv: closed
    (ecto) lib/ecto/adapters/postgres/connection.ex:86: Ecto.Adapters.Postgres.Connection.prepare_execute/5
    (ecto) lib/ecto/adapters/sql.ex:243: Ecto.Adapters.SQL.sql_call/6
    (ecto) lib/ecto/adapters/sql.ex:431: Ecto.Adapters.SQL.execute_and_cache/7
    (ecto) lib/ecto/repo/queryable.ex:130: Ecto.Repo.Queryable.execute/5
    (ecto) lib/ecto/repo/queryable.ex:35: Ecto.Repo.Queryable.all/4
    (stdlib) timer.erl:166: :timer.tc/1
Run Code Online (Sandbox Code Playgroud)

我为Plug.Exception协议定义了一个实现,以便DBConnection.ConnectionError在异常消息为 时映射到状态 503 "tcp recv: closed",这似乎有效。

defimpl Plug.Exception, for: DBConnection.ConnectionError do
  def status(exception) do
    if exception.message == "tcp recv: closed" do
      503
    else
      500
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,我担心的是DBConnection.ConnectionError异常以及异常"tcp recv: closed"对我来说太普遍了,无法假设发生了数据库超时。如果关闭的连接是由其他原因引起的,例如网络故障怎么办?

是否有更具体的方法来检测何时发生数据库查询超时?

elixir ecto phoenix-framework

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

使用 System.cmd 时带有通配符的 Elixir shell 命令失败

我有一个 elixir 程序,需要以编程方式删除可变数量的 PNG 文件。

/path/to/dir/<uuid>-frames-001.png
/path/to/dir/<uuid>-frames-002.png
/path/to/dir/<uuid>-frames-003.png
Run Code Online (Sandbox Code Playgroud)

等等。

自然,我想出了以下长生不老药代码来删除这些文件。

System.cmd("rm", ["/path/to/dir/" <> uuid <> "-frames-*.png"])
Run Code Online (Sandbox Code Playgroud)

我已经看到上面的代码以多种方式失败。首先,我在服务器上运行它并看到以下堆栈跟踪:

/bin/rm: cannot remove '/path/to/dir/<uuid>-frames-*.png': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我还在控制台会话中运行了此代码,并看到了完全相同的输出。

如果我在 bash 会话中运行以下命令,它工作正常!

rm /path/to/dir/<uuid>-frames-*.png

它返回一个0错误代码并删除预期的文件。似乎 elixir 将 the 解释*为文字字符,而不是执行预期的通配符删除。知道如何做到这一点吗?谢谢!

聚苯乙烯

显然,<uuid>是一个实际的 uuid,因此不应该从字面上解释这个问题的范围。

elixir phoenix-framework

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

更新 nix 包中的依赖项

目前在 Mac OS X 上使用 nix 频道提供的 Elixir 版本。该包是用 Erlang 18 构建的:

$ iex --version
Erlang/OTP 18 [erts-7.3.1.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

IEx 1.4.2
Run Code Online (Sandbox Code Playgroud)

我想更新包以使用 Erlang 19。在具有更新依赖项的 nix 中重建包的最直接方法是什么?

erlang elixir nix

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

在 Elixir 中编写 Ecto 查询

我从客户端传入的参数列表中创建了一个查询列表:

[
  #Ecto.Query<from v in Video, where: v.brand == ^"Cocacola">,
  #Ecto.Query<from v in Video, where: v.type == ^"can">
]
Run Code Online (Sandbox Code Playgroud)

但是,我需要遍历此列表并编写一个查询,该查询是所有查询的累加......(下一个查询的输入是当前查询等。)

有人能指出我如何做到这一点的正确方向。这将不胜感激!

我知道我可以一一撰写查询。但是我从客户端获取参数并且有一长串字段(品牌、类型等),并且不想对每个字段进行单独的查询。

elixir ecto phoenix-framework

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

Phoenix - 在 POST 响应中发送字节

我有一个可以在内存中生成 PDF 的应用程序。我需要将该 PDF 返回给浏览器。该请求是 POST 类型,但我在使用 send_download 时遇到问题。目前,我只能通过 GET 请求让它工作。

这是我尝试过的:

在控制器中,如果请求是 get,则此方法有效:(注意 pdf 是字节(<<37, 56, 66 ...>> 等)

send_download(conn, {:binary, pdf}, [filename: "doc.pdf"]
Run Code Online (Sandbox Code Playgroud)

但是,如果我将请求转换为 POST,则这不起作用。当我这样做时,我在服务器上没有收到任何错误。

我也尝试过:

  conn
    |> put_resp_content_type("application/pdf")
    |> put_resp_header("content-disposition", "attachment; filename=html.pdf")
    |> send_file(200, pdf)
Run Code Online (Sandbox Code Playgroud)

但当我尝试时出现以下错误:

无法使用空字节发送文件/5

保存字节的 pdf var 不为空。在此之前我进行了一次检查,结果并非为零。

我已经搜索过,但似乎无法找到看似如此简单的问题的答案。send_file 似乎不是正确的函数,因为文档说它需要完整路径而不是字节文件......

我试图避免将文件写入磁盘。

提前致谢。

elixir phoenix-framework

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

标签 统计

elixir ×6

phoenix-framework ×4

ecto ×3

emacs ×1

erlang ×1

haskell ×1

macos ×1

nix ×1

php ×1

ruby ×1

ruby-on-rails ×1

security ×1