如果我做实例方法,在连接方面是否存在b/w 1和2的差异.我的意思是在任何一种情况下,最终只会构造一个对象,即"abc".只是我看到的区别是测试将位于permgen空间内,即使线程来自实例方法,但是一旦线程超出方法,x将被垃圾收集但是构造的对象数量的术语将是相同的.对?
// option 1
String test="a"+"b"+"c";
// option 2
StringBuffer x = new StringBuffer().append("a").append("b").append("c").toString()
Run Code Online (Sandbox Code Playgroud)
我引用链接http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html来得出这个结论.
通过示例指南工作。本章中详细介绍的内容在我的应用程序中不起作用。看起来很简单的东西。我有一个视频模型:
defmodule Rumbl.Video do
use Rumbl.Web, :model
schema "videos" do
field :url, :string
field :title, :string
field :description, :string
belongs_to :user, Rumbl.User
belongs_to :category, Rumbl.Category
timestamps()
end
@doc """
Builds a changeset based on the `struct` and `params`.
"""
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:url, :title, :description])
|> validate_required([:url, :title])
|> assoc_constraint(:category)
end
end
Run Code Online (Sandbox Code Playgroud)
我还有一个类别模型:
defmodule Rumbl.Category do
use Rumbl.Web, :model
schema "categories" do
field :name, :string
timestamps()
end
@doc """
Builds a changeset based on …Run Code Online (Sandbox Code Playgroud) 我正在为Phoenix Elixir应用程序编写身份验证.我有一个插件我的浏览器管道,检查会话中的user_id.如果它存在,我将用户添加到conn:
router.ex
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
plug AccountMgr.Plugs.CheckSessionForUser
end
Run Code Online (Sandbox Code Playgroud)
check_for_user_on_session.ex
def call(conn, _opts) do
user_id = get_session(conn, :user_id)
cond do
user = user_id && Repo.get(User, user_id) ->
assign(conn, :current_user, user)
true ->
assign(conn, :current_user, nil)
end
end
Run Code Online (Sandbox Code Playgroud)
在我的登录功能中,如果凭据正确,我将user_id添加到会话:
cond do
user && checkpw(password, user.password_hash) ->
conn
|> assign(:user, user)
|> put_session(:user_id, user.id)
|> configure_session(renew: true)
|> redirect(to: portfolio_path(conn, :index)) …Run Code Online (Sandbox Code Playgroud) 我有模板代码,如下所示:
<%= form_for @changeset, @action, fn f -> %>
<%= if Enum.any?(f.errors) do %>
<%= for {attr, message} <- f.errors do %>
<li><%= humanize(attr) %> <%= message %></li>
<% end %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但即使更改集包含错误,也不会打印错误.这是检查的表单结构.请注意,即使错误列表是根据更改集生成的,但错误列表仍为空.
%Phoenix.HTML.Form{data: %BlogPhoenix.Comment{__meta__: #Ecto.Schema.Metadata<:built, "comments">,
content: nil, id: nil, inserted_at: nil, name: nil, post_id: nil,
posts: #Ecto.Association.NotLoaded<association :posts is not loaded>,
updated_at: nil}, errors: [], hidden: [], id: "comment",
impl: Phoenix.HTML.FormData.Ecto.Changeset, index: nil, name: "comment",
options: [method: "post"],
params: %{"content" => nil, "name" …Run Code Online (Sandbox Code Playgroud) 我正在使用Elixir/Phoenix,我有一个端点,它返回一个分块响应,比如说一个永无止境的日志行流.但是,日志行来自另一个服务A,它也返回一个分块响应.我希望我的端点从服务A读取分块响应,并以块的形式将它们传递给客户端.从本质上讲,它只是服务A的代理,但我不能让客户端直接连接到服务A,因为我需要执行一些身份验证.
我正在使用简单的凤凰灵药应用程序。在此应用程序中,我尝试公开一个 REST API 来保存和检索数据。
就我而言,如果主键(电子邮件地址)重复,我的应用程序将引发错误。我需要知道处理这个错误的最佳方法;try-catch 或任何其他更好的解决方案。
这是我的数据保存方法
def post(conn, %{"stooge" => stooge, "name" => name, "email" => email , "password" => password})do
respond = Repo.insert!(%ApiDb.User{name: name, email: email, stooge: stooge, password: password})
json conn, respond
end
Run Code Online (Sandbox Code Playgroud)
样本有效载荷
{
"stooge": "moe",
"name": "Joe",
"email": "p31111ww11eee32111111134@dmain.com",
"password":"asdasd"
}
Run Code Online (Sandbox Code Playgroud)
模型/user.ex
defmodule ApiDb.User do
use ApiDb.Web, :model
schema "users" do
field :password, :string
field :name, :string
field :email, :string
field :stooge, :string
timestamps()
end
@doc """
Builds a changeset based on the `struct` and …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何连接到postgres数据库,运行查询,然后断开连接.
看看Postgrex,我建立了一个连接
{:ok, pid} = Postgrex.start_link(hostname: "localhost", username: "postgres", password: "postgres", database: "postgres")
Run Code Online (Sandbox Code Playgroud)
然后我使用执行我的查询
Postgrex.query!(pid, "SELECT user_id, text FROM comments", [])
Run Code Online (Sandbox Code Playgroud)
但是,我怎么断开?
我想断开连接,因为我循环遍历N个数据库并对所有数据库运行相同的查询.
我尝试退出过程,例如Process.exit(pid, :bye),但它也因为它的开始而杀死了产卵过程start_link/3.我找不到一个start/3功能Postgrex.
我有message = %{"to" => "testuser", "value" => "asdads"}地图.我需要访问此地图中"to"键的值
message.to
message[:to]
Map.fetch!(message, to)
Run Code Online (Sandbox Code Playgroud)
到目前为止没什么用
这是控制台错误消息
[error] GenServer #PID<0.395.0> terminating
** (KeyError) key :to not found in: %{"to" => "testuser", "value" => "aadadadad"}
(phoenix_chat) web/channels/room_channel.ex:31: PhoenixChat.RoomChannel.handle_in/3
(phoenix) lib/phoenix/channel/server.ex:225: anonymous fn/4 in Phoenix.Channel.Server.handle_info/2
(stdlib) gen_server.erl:601: :gen_server.try_dispatch/4
(stdlib) gen_server.erl:667: :gen_server.handle_msg/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: %Phoenix.Socket.Message{event: "message:new", payload: %{"to" => "testuser", "value" => "aadadadad"}, ref: "4", topic: "room:Pamidu"}
State: %Phoenix.Socket{assigns: %{user: "Pamidu"}, channel: PhoenixChat.RoomChannel, channel_pid: #PID<0.395.0>, endpoint: PhoenixChat.Endpoint, handler: PhoenixChat.UserSocket, id: nil, …Run Code Online (Sandbox Code Playgroud) 让我们说我们有表SP(sid,pid),表明学生sid参与项目pid.现在我想要一个mysql查询来选择至少参与一个项目的所有学生对,以及他们合作的项目数量.
例如:
输入:
S1 P1
S1 P2
S2 P1
S3 P1
S4 P1
S4 P2
输出:
S1 S2 1
S1 S3 1
S1 S4 2
S2 S3 1
S2 S4 1
S3 S4 1
我正在尝试解析日期,例如"Sat, 29 Dec 2012 04:07:09 +0100"
我正在使用格式设置为的SimpleDateFormatter
new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.getDefault());
Run Code Online (Sandbox Code Playgroud)
不幸的是我得到了
12-29 04:44:29.890: E/MainActivity(3995): Unparseable date: "Sat, 29 Dec 2012 04:07:09 +0100" (at offset 0)
12-29 04:44:29.890: E/MainActivity(3995): java.text.ParseException: Unparseable date: "Sat, 29 Dec 2012 04:07:09 +0100" (at offset 0)
Run Code Online (Sandbox Code Playgroud)
我绝对不会得到,因为参数正则表达式是直接从文档http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html下复制和粘贴的
谢谢!
如何在架构中添加功能?我想创建用于动态地将字段添加到模型模式的函数.例:
def func do
# .. loop to create dynamic fields
field :street, :string
end
schema "objects" do
func
end
... Error:
** (CompileError) web/models/objects.ex:12: undefined function func/0
Run Code Online (Sandbox Code Playgroud) 我想在我的聊天应用程序中使用{:redix,"〜> 0.6.1"} hex包,并从监督树开始
{:ok, conn} = Redix.start_link()
{:ok, conn} = Redix.start_link(host: "example.com", port: 5000)
{:ok, conn} = Redix.start_link("redis://localhost:6379/3", name: :redix)
Redix.command(conn, ["SET", "mykey", "foo"])
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将连接开始链接放到子进程时它会出错
children = [
# Start the Ecto repository
supervisor(PhoenixChat.Repo, []),
# Start the endpoint when the application starts
supervisor(PhoenixChat.Endpoint, []),
# Start your own worker by calling: PhoenixChat.Worker.start_link(arg1, arg2, arg3)
# worker(PhoenixChat.Worker, [arg1, arg2, arg3]),
supervisor(PhoenixChat.Presence, []),
#supervisor(Phoenix.PubSub.Redis, [:chat_pubsub, host: "127.0.0.1"])
]
Run Code Online (Sandbox Code Playgroud)
如何启动redix连接并将数据存储到Redis?