我不熟悉长生不老药和凤凰,也不熟悉凤凰指南。在入门指南中,他们只是说,但并没有解释什么是端点,什么是任务。有人能解释一下它的作用吗?不要从@Gazier身上拿走任何东西,但我同意@JoseValim;他的回答应该是一个答案,这样其他可能寻找这个答案的人可以很容易地找到它
端点是所有对web的请求的边界
应用程序启动。它也是应用程序提供的接口
到底层web服务器
总而言之,端点有三个职责:
提供用于启动和停止端点的包装器作为
属于
监督树
定义发送请求的初始插入管道
为应用程序承载特定于web的
伞式应用程序的行为与mix设置的普通应用程序非常相似。它们具有配置,可以作为一个整体启动。因此,随着应用程序的增长,它们可以扩展为伞式应用程序。现在,我想将伞式应用程序定义为更大伞式应用程序中的一个应用程序
有什么好的理由不这样做吗
还有没有一种方法/约定来命名应用程序的名称空间?
比如说
def project do
[app: :"analytics.web",
version: "0.0.1",
deps_path: "../../deps",
loc
假设我在某处存储了一个文件,它可以是jpeg文件,也可以是png文件,如何检查它是什么
我应该检查一下分机吗?还是应该读取文件的二进制签名?或者我该怎么做?更新:2016年4月2日,包括.JPG验证
有一个相当流行的十六进制软件包可能适合您。从Arc中提取:
def validate({file, _}) do
~w(.jpg .jpeg .gif .png .JPG) |> Enum.member?(Path.extname(file.file_name))
end
我想你可以提取
elixir新手…所以我键入iex server.ex以使用StackServer启动elixir环境。(我正在使用kiex和kerl来设置长生不老药,如果这有区别的话)
我有:
第1行很好,但当我执行上面的第2行时,会出现以下错误:
23:50:04.491 [error] GenServer #PID<0.64.0> terminating
** (stop) bad cast: {:push, 2}
lib/gen_server.ex:432: StackServer.
是否可以在现有结构中设置值?
我说的是将现有结构传递到函数中并设置该结构的“name”值的想法(例如)
我所拥有的:
main.exs
user.exs
defmodule User do
defstruct [name: ""]
def constructor(name) do
%User{name: name}
end
end
有什么办法让这个想法起作用吗
def setName(struct, newName) do
struct.nam
我有这个模型:
defmodule MyApp.MyModel do
use MyApp.Web, :model
import Ecto.Query
# ....
如何向其中添加一个实例方法,该方法还使用MyModel上的其他字段?这不起作用,因为在html页面上,它会抛出一个异常,称为the key:my_method not found
defmodule MyApp.MyModel do
use MyApp.Web, :model
import Ecto.Query
标签: Elixir
phoenix-frameworkecto
不创建迁移就不能修改架构?为什么会有移民和移民计划?为什么不仅仅是移民?这似乎是多余的。迁移是更改数据库架构的方便方法。每次迁移都可以被视为数据库的新版本。您可以根据需要添加或删除表、列或条目。
其中asSchema是数据库的当前状态
建议通过迁移来更改模式,因为您知道如何更改数据库的历史,并且它提供了回滚迁移等功能
考虑一个新生成的phoenix应用程序,当我们运行mixect.create时,当前没有表,只有一个空数据库。根据我们的要求,我们需要一张表格,上面写着user。我们使用mix-e
字符串:Lorem ipsum{{dolor}}sit{{amet}},CONCETETUR ADIPSING{{elit}},
我想从上面提到的字符串中提取一个包含{{}的所有标记的列表,并对它们进行处理,即检查db是否存在,然后将它们替换为标记链接,如下所示
[substring](/tag/:substring_id)
我可以换成
String.replace(string, ~r/\{\{.+?\}\}/, "new substring")
但这对我没有帮助,因为我无法处理子字符串
标签: Elixir
string-concatenation
在Elixir中,您可以使用操作符连接字符串,如中的“Hello”“World”
还可以使用管道操作符|>将函数链接在一起
我正在尝试编写长生不老药代码来格式化在线游戏的货币
def格式\u价格(price)do
价格/万
|>浮动圆(2)
|>串
|>“g”
结束
上述操作会导致语法错误。我是否忽略了可以连接字符串的基本函数?我知道我可以自己定义一个,但如果我能避免的话,这似乎会在我的代码中造成不必要的混乱
我意识到我可以完成同样的事情,只需将方法链接在一起,比如到_string(Float
我开始使用长生不老药,但在使用模式匹配时遇到了一些问题
假设我要声明一个映射,例如:
var = %{
y: Float.parse("3.4"),
z: Float.parse("7.8")
}
要达到以下效果:
var = %{
y: 3.4,
z: 7.8
}
考虑到Float.parse返回{floatVal,}。如何在不声明临时变量的情况下执行此操作
下面的代码是实现这一点的唯一方法吗
var = %{
y: Float.parse("3.4
如何将管道占位符传递给函数中的第二个参数
defdefmodule CamelCase do
str = "The_Stealth_Warrior"
def to_camel_case(str) do
str
|> Regex(~r/_/, 'need_to_pass_str_argument_here', "")
|> String.split(" ")
|> Enum.map(&(String.capitalize(&a
标签: Elixir
phoenix-frameworkgen-server
我需要在应用程序启动时启动GenServer,但是调用和转换GenServer需要它的PID。我将如何在应用程序的其余部分中获得这些信息,以供将来使用 如果GenServer将死亡并由主管重新启动,它将收到新的pid,您的“存储”pid将不再有效-您将无法访问GenServer。这就是为什么您应该在此处使用名称:
{:ok,{}=GenServer.start\u link(MyApp,[:hello],name::your\u GenServer\u name)
然后,调用/播放将如下所示:
复制受给定长度限制的列表模式的最佳方法是什么
例如:
给定一个模式[1,2,3]和长度7,结果将是[1,2,3,1]我能想到的最简单的方法是使用Stream.cycle/1和Enum.take/2:
iex(1)> [1, 2, 3] |> Stream.cycle() |> Enum.take(7)
[1, 2, 3, 1, 2, 3, 1]
我正在构建一个elixir/phoenix项目,希望对所有未捕获的错误(包括控制器、视图、路由器和套接字通信错误)进行一些额外的处理
我想做的是捕获所有未捕获的错误,并将错误信息发送到外部错误日志聚合器,然后再次引发错误以完成原始错误过程
例如,对于我来说,以下选项中的最佳选项是什么
使用Plug.ErrorHandler
使用自定义插头
实现一个指令器
提前谢谢。这个问题是基于观点的,但我会尽力提供最不偏颇的答案
Phoenix本身,也就是说在dev环境中几乎就是为了这个目的。它的大部分功
我在试图使用蒸馏器在运行时获取系统变量时遇到了一个问题。目前,我已将与数据库的连接定义为:
config :myapp, MyApp.Repo,
adapter: Ecto.Adapters.Postgres,
timeout: 2000000,
username: "${DB_USER}",
password: "${DB_PASSWORD}",
database: "${DB_DATABASE}",
hostname: "${DB_HOST}",
如何生成此表达式的输出
quote do
defmodule X do
unquote do
IO.puts "working ..."
args = [{:a, [], Elixir}, {:b, [], Elixir}]
quote do
def myfun(unquote_splicing(args)) do
end
end
end
end
end
quote do
defmodu
标签: Elixir
phoenix-frameworkecto
我开始在教程之外使用Phoenix作为一个小用例。到目前为止还不错,但我对以下几点有点吃惊
我有一个资源“录制”,我想访问JSON中的at/api/recordings和带有模板的at/recording,结果是HTML
理想情况下,EXTO表示将是唯一的,甚至控制器的一部分也将共享
现在我要么有2个资源recordingAPI和RecordingTML,要么有2个控制器和1个资源
有什么例子吗?我一直在寻找其中一个,但没有找到用于同一资源的:api管道和:browser管道
谢谢您可以利用ph
我可以在模块中定义命名函数,但我还没有掌握在iex>或ex>控制台中使用命名函数的诀窍
在尝试运行def命令时,我不断遇到以下错误:
(ArgumentError) cannot invoke def/2 outside module
pptime.exs
IO.puts "initial division test"
defmodule Expand do
def transform(myvar) do
8 * myvar + 3;
end
end
div
尝试更新(或创建)记录时收到无效的CSRF令牌错误。我正在使用ElixirV1.0.3、Erlang/OTP17[erts-6.3]和Phoenix v0.8.0(我想,我不知道如何检查Phoenix的版本)。我正在创建一个web应用程序,主要遵循Phoenix指南和Elixir Dose Jobsite示例资源。然而,当我试图从html表单发布信息时,我得到了无效的CSRF令牌错误。按照错误中给出的建议,我在操作中添加了“x-csrf-token”:csrf_token
edit.html.e
我正在创建我的第一个Elixir-Phoenix应用程序。我已经写了一些我想在多个控制器中使用的插件,现在有很多代码重复,因为插件代码在我所有的控制器中都被重复
我的问题是,是否有一个文件,我可以在其中放置所有插头,然后从不同的控制器访问和使用它们
# somefile to define my plugs
defp load_subject(conn, _) do
subject = Subject |> Repo.get conn.params["subject_id"]
我目前正在寻找添加一个CSS类,如果一个页面是活动的。目前在凤凰城做这件事的最佳方式是什么?这个案子有帮手吗
def active(option, conn) do
if option == conn.request_path do
" class=\"active\""
else
""
end
end
在模板中:
<%= "contact" |> active(@conn) |> raw %>
active(@conn)|>raw%>
我
如何使用System.get_env(“访问密钥ID”)
我已经创建了一个包含以下内容的config/application.yml文件
dev:
access_key_id: ABCDEFGHIJKLMN
我尝试过使用费加罗长生不老药,当我从终端测试它时,它工作得非常完美
当我跑的时候
$ MIX_ENV=dev iex -S mix
iex(1)> System.get_env("ACCESS_KEY_ID")
"ABCDEFGHIJKLMN"
iex(2)>
但是在我的
我有一个定义版本的长生不老药项目。如何从正在运行的应用程序中访问此文件
在mix.exs中
def project do
[app: :my_app,
version: "0.0.1"]
end
我想在应用程序中访问此版本号,以便将其添加到返回的消息中。我在env散列中查找如下内容
__ENV__.version
# => 0.0.1
我在:application中找到了该版本。哪个应用程序,但它需要一些解析:
defmodule AppHelper do
标签: Elixir
phoenix-frameworkactioncable
我试着比较凤凰频道和新频道在使用WebSocket时的表现
对于某些上下文,ActionCable在向所有客户端广播消息时使用Redis处理PubSub。示例场景:一个单独节点上的3个rails进程中的1个将能够广播到所有web服务器上连接的客户端。这是通过点击Redis来实现的,Redis反过来发布到所有rails服务器,然后这些服务器推送到所有连接的客户端
我最近读到了关于websocket连接的文章
还发现了这个宝石:
Phoenix 1.0发行说明中提到了以下有关频道的内容:
即使在一组
我想使用Phoenix的开箱即用create/2功能将其用于我的用户注册用例。为了实现这一点,我需要以幂等方式创建一个用户。我很难找到用长生不老药做这件事的最有效的方法
例如,这是Phoenix用于创建资源(在本例中为用户)的现成代码段:
我想做的是首先检查用户是否存在于特定字段中。如果存在,则返回一个带有对象的200,否则运行上面的代码
我会使用嵌套的case语句进行此操作还是 使用函数插件返回现有用户
这是一个很好的例子。您可以在示例中看到他们如何将show操作从多个嵌套案例转换为使用插件。
标签: Elixir
channelphoenix-framework
我试过这个
我也试过这个,也许我的答案有问题,也试过这个代码
但是他们中没有一个可以向应用程序中添加新消息,任何帮助都很好。您需要运行服务器才能使其正常工作
iex -S mix phoenix.server
然后在IEX中:
Phoenix.Channel.broadcast "rooms", "lobby", "new:msg", %{user: "User", body: "Hello from console"}
光跑是不够的
Iex -S mix
在这种情况下,没有任何内容侦听事
我正在学习长生不老药,我决定给自己做的练习之一就是试着用惯用的长生不老药来编写信用卡验证程序
我意识到Elixir中的==是一个内核函数,显然是由编译器内联的。有没有什么实用功能可以让我做这样的事情
...
|> == 0
而不是像我在这里所做的那样,定义一个要导入的函数
长生不老药
defmodule Luhn do
def equalzero?(x) x == 0 end
def validate(num) do
digits = Integer.digits(num
我有一个用户和一封电子邮件脚手架(一个用户有许多电子邮件)。如果用户有电子邮件,我想在用户显示中显示电子邮件索引模板。代码如下:
web/controllers/user\u controller.ex
[...]
def show(conn, %{"id" => id}) do
user = Repo.get!(User, id) |> Repo.preload([:emails])
conn
|> assign(:user, user)
|> ren
如何为接受(比如)一个具有默认值的参数的函数编写类型规范?如下所示:
def foo(bar \\ 10) do
bar
end
是这样的吗
@spec foo(integer) :: integer
或者会是什么
谢谢。是的
我想补充一点,如果你的问题是,如果一个函数的typespec有一个默认值的参数和一个没有默认值的参数之间存在差异,那么就没有区别。它按预期工作,因为你实际上定义了两个函数
@spec foo(integer) :: integer
def foo(bar \\ 1
我想对一系列值的组合进行一些分析
我有以下函数,但由于某种原因,在理解完成后,在函数体的末尾,变量analytics仍然是一个空列表,而它不在每次迭代的理解范围内
有什么想法吗
def handle_cast({:start}, state) do
intervals = [7, 30, 90]
groupings = ["day_of_week", "time_of_day"]
aggregators = [
%{
domain: "supp
我想知道是否有更新Elixir的命令。下面是我如何更新到Elixir 1.3的
在终端:
brew unlink elixir
然后
brew install elixir
有没有办法用一个终端命令完成此更新
感谢您抽出时间。跑步:
brew update && brew upgrade elixir
假设自制是最新的,我可以运行brew upgrade elixir?
我已经编写了一些代码来生成值流,我想将它们发送到一个文本文件进行分析。我知道如何使用
{ f, :ok } = File.open( 'foobar', [ :write, :utf8 ] )
但我找不到将流发送到此文件的方法,即使我确信这一定很琐碎
由于这可能是相当大的数据量,我希望避免使用中间数据结构,并坚持使用流式方法。如果可能的话,我还希望有一些方法来保证文件将被关闭,即使在出现错误的情况下。流是使用file.stream创建的。您不需要显式关闭流,因为每次您//将数据流式传输到
我有一个大型数据集,我正在使用它执行以下操作:
data = %{
city: ["Chiselhurst", "Saskatchewan", "Boston"],
day: [1, 2, 3, 4, 5, 6, 7],
transportation: ["plane", "train", "automobile"]
}
defmodule Make do
def combos(data) do
for city <- data[:city],
d
我有以下文件。如果你看app.ex,医生说2+2等于3。
我故意让它失败
app.ex
defmodule App do
@doc """
Adds two numbers
## Examples
iex> App.add(2, 2)
3
"""
def add(a,b) do
a + b
end
end
app_test.exs
defmodule AppTest do
我想这样做:
cust = Repo.get(Customer, id)
case cust do
nil ??? or not nil but is_activated == false && registration_date is over 1 month ago?? -> # something1 .....
custm1 -> # something2
end
cust = Repo.get(Customer, id)
mon
我试图打印二叉树中给定级别的节点。我已经写了一个方法来实现这一点,并编写了一个guard子句来处理基本条件(我没有在问题中包括)
这种方法给了我错误的说法
height-1”看起来像一个函数调用,但有一个名为“height”的变量,请使用显式括号甚至空格
(stdlib)lists.erl:1353::lists.mapfoldl/3
(stdlib)lists.erl:1354::lists.mapfoldl/3
简短回答:将height-1替换为height-1
由于函数可以在Elixir中
标签: Elixir
phoenix-frameworkplug
我正在尝试将标题Connection:Keep Alive放在lib/app/endpoint.ex中:
plug Plug.Static,
at: "/", from: :app, gzip: true,
only: ~w(css fonts images js favicon.ico robots.txt),
etag_generation: {},
cache_control_for_etags: "public, max-age=3153600",
headers:
假设我有一个模式
defmodule User do
use MyApp.Web, :model
schema "users" do
field :loved_numbers, {:array, :integer}
end
end
我如何使用exto.Query搜索恰好有2个爱过的号码的所有用户
此查询在PostgreSQL和MySQL中都能工作吗?对于PostgreSQL,您可以使用片段使用array\u length函数:
from(u in User, where
我遵循了完整的教程,解释了@chrismccord如何处理上下文和身份验证/授权……我利用了他关于将auth与dockyard blog分离的帖子:slight_smile:和
根据这一点,在我的案例中(CMS是ENR)所有创建的学生都需要一个注册者,注册者通过自己的会话链接到一个用户(经过身份验证):Student->属于注册者,注册者->属于用户,用户有自己的凭证
resources”/students,StudentController受到保护,这很好
但现在我想揭露一些事实:如果我们想让
例如,在此模块字符串的typespec中:
@spec validate(String.t) :: {:atom}
这是什么意思?我如何通过iex测试它
** (UndefinedFunctionError) function String.t/0 is undefined or private
(elixir) String.t()
更新
看起来有些人看不到通过iex进行测试的必要性
对于其他正在学习长生不老药的人,我们可以这样做:
iex(8)> t String
@typ
出于某种原因,此代码
for i <- 7..0, into: <<>>, do: if i in [0, 1], do: <<1::1>>, else: <<0::1>>
对于i对于i对于i这在elixir版本中是固定的
iex(1)> for i <- 7..0, into: <<>>, do: if i in [0, 1], do: <<1::1>>,
我知道Elixir在需要忽略这些参数时使用下划线作为参数。我的问题是,为什么会有它们
def photos(_,_,_) do
{:ok, Instagram.Posts.list_photos}
end
def photo(_, %{id: id}, _) do
{:ok, Instagram.Posts.get_photo!(id)}
end
在本例中,我编写了一个方法(来自教程),该方法接受三个参数,现在都不使用,因此使用下划线,但为什么不使用空括号?在第二个示例中,我
是否有类似于Django graph_models的工具来生成phoenix webapp数据库图
python manage.py graph_models
我也在想这个问题。由于没有针对长生不老药/异位素的解决方案,我找到了两个合理的选择:
-一个仅基于DB创建ERD的工具-它实际上非常棒和快速。我选择了这个选项
请考虑自己画。
您可能可以使用特定于数据库的工具,如pgAdmin或DataGrip等。这有点不同,但仍然有些不同。你还需要小心不要将Phoenix与exto混为一谈EXTO
为什么这样可以,
iex(23)> << "Halo" >>
"Halo"
iex(23)>>
“光环”
而这在长生不老药中不好吗
iex(24)> << String.reverse("Halo") >>
** (ArgumentError) argument error
iex(24)>>
**(ArgumentError)参数错误
当您在中有一个表达式时,默认情况下,该表达式的类型被假定为表示一个字节的整数
iex(1)&g
我可以像这样使用“累积”选项将模块属性注册为true
Module.register_attribute __MODULE__, :structs, accumulate: true
for line <- [%{"some" => %{"test1" => 1, "test2" => 2}}, %{"some" => %{"test1" => 3, "test2" => 4}}] do
@structs %Struct{
目前我有这样的想法:
ref = Process.monitor(worker)
receive do
{:DOWN, ^ref, :process, ^worker, :normal} ->
IO.puts("Normal exit from #{inspect(worker)}")
{:DOWN, ^ref, :process, ^worker, msg} ->
IO.puts("Received :DOWN from #{inspect(worker
如何将所有Enum.map值转换为字符串
result =
Enum.map(
from(Scheme, where: ^whitelisted_params) |> limit(^query_limit) |> Repo.all(),
fn elem ->
elem |> Map.from_struct() |> Map.delete(:__meta__)
end
)
在方案中,有string、bool和int类型使用
标签: Elixir
phoenix-frameworkecto
我对长生不老药/凤凰城很陌生,我对一个概念有点困惑。我找到了一个解决办法,但我不满意
背景:
我在数据库中创建了一个“项目”。现在,我想通过项目“显示”页面创建一个与项目相关的“工作项”。因为它与那个特定的项目相关,所以我需要将ID添加到变更集中
我试着在项目\u控制器中这样做:
def show(conn, %{"id" => id}) do
project = Clients.get_project!(id)
changeset = Client
如何将此集合分解为更小的组?
要获取此[[1,2,3],[4,5,6]请使用将其按块分割
Enum.chunk_every([1,2,3,4,5,6],3)
#⇒ [[1, 2, 3], [4, 5, 6]]
或者将其拆分为包含两个部分的元组
Enum.split([1,2,3,4,5,6],3)
#⇒ {[1, 2, 3], [4, 5, 6]}
用于按块分割
Enum.chunk_every([1,2,3,4,5,6],3)
#⇒ [[1, 2, 3], [4, 5, 6]]
或者将其拆
标签: Elixir
phoenix-frameworkelixir-iex
我知道我们可以发布iex-S mix phoenix.server。但是,假设我已经在iex-S组合中。如何启动服务器
谢谢。我很抱歉地告诉你,这是不可能做到的
请参阅此讨论以获取参考:
我引述:
不打算从iex或应用程序内部调用Mix。主界面是CLI,因此任务只能运行一次
只要开始以iex-S mix phx.server运行,那么iex和您的应用程序将一起运行这可能不是一种很好的方式,但我想您只是在dev中这样做。但是一种方法是设置mix phx.server集合,然后重新启动端点(本例停止
上一页 1 2 ...
75 76 77 78 79 80 81 ...
下一页 最后一页 共 125 页