我有类似以下内容
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的类型系统中表达这一点?
注意:很遗憾,我无法提出这些单独的请求.我只是遵循一个定义的协议.
我正在尝试更新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) 我的网站有页眉,页脚和主要内容.如果用户未登录,则可以显示登录表单而不是实际内容.
在该登录表单上,我$_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查询.
我的问题是,是否有任何安全问题?有任何方法可以利用它,在网址中输入恶意内容,然后将其发送给其他用户,例如......?我是否应该在某个过程中以某种方式逃避某些事情?
emacs中的ctrl-backspace会删除所有空白是很好的。但是,它并不止于此!它似乎只有删除至少一个单词后才会停止。例如,这意味着在这里使用它:
foo(bar)
<cursor>
Run Code Online (Sandbox Code Playgroud)
结果是
foo(<cursor>
Run Code Online (Sandbox Code Playgroud)
哪个真傻(恕我直言)!我想要的行为类似于以下内容:
这似乎是一个更合理的Ctrl-Backspace,但是老实说,如果我能得到(1),那将是一个巨大的改进。是否有用于此的包装或设置?我不太了解emacs lisp,但也许会指出相关API的位置...
我是 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) 当 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 程序,需要以编程方式删除可变数量的 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,因此不应该从字面上解释这个问题的范围。
目前在 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 中重建包的最直接方法是什么?
我从客户端传入的参数列表中创建了一个查询列表:
[
#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)
但是,我需要遍历此列表并编写一个查询,该查询是所有查询的累加......(下一个查询的输入是当前查询等。)
有人能指出我如何做到这一点的正确方向。这将不胜感激!
我知道我可以一一撰写查询。但是我从客户端获取参数并且有一长串字段(品牌、类型等),并且不想对每个字段进行单独的查询。
我有一个可以在内存中生成 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 似乎不是正确的函数,因为文档说它需要完整路径而不是字节文件......
我试图避免将文件写入磁盘。
提前致谢。