小编Ell*_*son的帖子

具有依赖性的Elixir脚本

我正在写一个快速的Elixir脚本,我想使用csv库依赖项.创建一个新的混合项目似乎有点过分,只是为这个库添加依赖管理.你会推荐什么?你会在混合项目路线中找到一个带有依赖关系的简单脚本吗?

编辑

注意:我不是在问全局如何安装和访问依赖项.问题是,"你会去混合项目路线......"建议的方法是什么?

elixir

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

测试Elixir Ecto模型关联的最佳实践

我正试图在Elixir中测试一个属于该关联的人.

假设我有两个型号,一个产品和一个ProductType.产品属于产品类型.

defmodule Store.Product do
  use Store.Web, :model

  schema "products" do
    field :name, :string

    belongs_to :type, Store.ProductType, foreign_key: :product_type_id

    timestamps
  end

  @required_fields ~w(name product_type_id)

  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end

defmodule Store.ProductType do
  use Store.Web, :model

  schema "product_types" do
    field :name, :string

    timestamps
  end

  @required_fields ~w(name)
  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我在测试文件中的内容:

defmodule Store.ProductTest do
  use Store.ModelCase

  alias Store.Repo
  alias Store.Product …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

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

将十六进制字符串转换为整数

我有一个十六进制值的数据包,我正在尝试处理.它们以字符串形式出现.例如,一个数据包是C0,即192.但是,我不太确定如何将字符串值转换为整数值.

如果我用这个:

Base.decode16!("C0")
# <<192>>
Run Code Online (Sandbox Code Playgroud)

......我得到了二进制文件.

我能想到提取这个整数值的唯一方法是这样的:

<<x>> = Base.decode16!("C0")
x
# 192
Run Code Online (Sandbox Code Playgroud)

这是有效的,似乎有点惯用,但我是Elixir的新手,并且不确定这是否是最好的解决方案.您如何将字符串十六进制值转换为Elixir中的整数?

elixir

8
推荐指数
2
解决办法
3616
查看次数

同一远程主机和端口上的多个 SSH 反向端口隧道

我遇到了一些反向端口隧道服务,例如http://progrium.com/localtunnel。我知道他们允许我轻松设置反向 SSH 端口隧道,这让我可以在线显示我的本地 Web 服务器(例如,我在端口 3000 上本地运行 Rails 应用程序,并使用 localtunnel 的服务,我可以通过 URL 在线与某人共享它像 xhd3s.localtunnel.com。)

不过,我对它的工作原理有些困惑。当您设置远程隧道时,您必须指定要接管的远程端口,这意味着远程服务器上的每个端口一个隧道。但是,使用这些端口隧道服务,每个人都指定相同的远程端口。唯一的区别是标记化的子域。

他们如何使用标记化的子域并将其转换为使用相同端口的唯一隧道?我怀疑有一些网络服务器魔法在起作用,但我不太确定这将如何工作。

编辑:

换句话说,我希望能够从两台不同的计算机发出这些命令:

# first computer
ssh -R 9000:localhost:3000 jim@xcvs.myserver.com

# second computer
ssh -R 9000:localhost:3000 john@csde.myserver.com
Run Code Online (Sandbox Code Playgroud)

我在 myserver.com 上做什么才能允许这两个反向端口隧道在端口 9000 上运行?

linux ssh webserver

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

没有作者提交的Git日志

我们正在开发一个项目,其中大多数提交都是由前端开发人员添加的.他正在编辑主要是HTML,CSS,JavaScript文件,这些文件与我正在帮助的后端工作无关.如果我能显示git log前端开发人员添加的减号提交,那将是很好的,因此我可以获得与后端相关的提交视图.

我可以传递一个选项git log,允许我排除作者的所有提交吗?我只想排除这一个开发人员的提交,我仍然关心查看其他开发人员的提交.

git

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

创建一个接受具有相同方法的两个不同对象的函数

我正在学习Golang并希望了解解决这个问题的"Go way".

具体来说,我正在使用该sql软件包,我在代码中看到了一些冗余功能,我想将其转换为函数.

我的原始代码

我有,1)用户结构:

type User struct {
  ID        int
  FirstName string
  LastName  string
}
Run Code Online (Sandbox Code Playgroud)

2)从数据库中获取ID的一个用户的函数(Postgresql):

func GetUserById(id int) (user User) {
  sql := `
    SELECT id, first_name, last_name
    FROM users
    WHERE id = $1
  `
  row := db.QueryRow(sql, id)
  err := row.Scan(&user.ID, &user.FirstName, &user.LastName)
  if err != nil {
    panic(err)
  }
  return
}
Run Code Online (Sandbox Code Playgroud)

并且,3)用于获取数据库中的所有用户的功能:

func GetUsers() (users []User) {
  sql := `
    SELECT id, first_name, last_name
    FROM users
    ORDER BY last_name …
Run Code Online (Sandbox Code Playgroud)

go

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

您如何测试golang命令行输出

我想测试golang命令行应用程序的输出,但是我不太确定如何使用go的测试库来实现。

假设我有一个像这样的程序:

package main

import (
    "flag"
    "fmt"
)

func main() {
    const (
        cityDefault = "San Francisco"
        cityDoc     = "the city you want the forecast for"
    )
    var city string
    flag.StringVar(&city, "city", cityDefault, cityDoc)
    flag.StringVar(&city, "c", cityDefault, cityDoc)
    flag.Parse()

    fmt.Println(city)
}
Run Code Online (Sandbox Code Playgroud)

我想测试这两个:

$ ./myapp -c "Los Angeles"
$ ./myapp -city "Los Angeles"
Run Code Online (Sandbox Code Playgroud)

...输出Lost Angeles。因此,我想问题是,如何集成测试golang命令行应用程序的输出?

testing go

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

为什么 if 语句中的模式匹配不受欢迎?

我刚刚在我的 Phoenix 应用程序中安装了Credo mix 库,它告诉我该web/views/error_helpers.ex文件在错误标记方法中有重构机会:

def error_tag(form, field) do
  if error = form.errors[field] do
    content_tag :span, translate_error(error), class: "help-block"
  end
end
Run Code Online (Sandbox Code Playgroud)

信条给出的信息是:

条件中不应存在匹配项if

换句话说,if error = form.errors[field] do里面有一个模式匹配。但是,除了该消息之外,Credo 库没有详细说明。

为什么这样不好?

elixir phoenix-framework

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

增加Elixir IEx.pry会话的超时时间

我正在尝试增加IEx.pry会话的超时时间。具体来说,我在Phoenix框架单元测试中试探。我在测试正文中添加了以下内容:

require IEx
IEx.pry
Run Code Online (Sandbox Code Playgroud)

我查看了该pry方法的IEx文档,它说第一个参数是以毫秒为单位的超时时间。但是,当我将撬叫更新为:

IEx.pry(60000)
Run Code Online (Sandbox Code Playgroud)

...它仍然会在30秒后超时。如何增加此超时时间?

编辑

为了后代的缘故,在Elixir 1.1中,您可以--trace在测试命令上使用该标志,并且将使用超时无限。例如:

$ iex -S mix test test/models/user_test.exs:37 --trace
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework iex

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

使用Angular2/AngularFire2创建或增加值

我正在使用Angular 2和AngularFire 2与Firebase进行交互.在Firebase中,我有一个标签集合.我想创建或增加标签的数量.我正在使用的代码看起来像这样:

let tagName = "angular";
let tagObs = this.af.database.object(`/tags/${tagName}`);
tagObs.subscribe(function(snapshot) {
    let newValue = (snapshot.$value) ? (snapshot.$value + 1) : 1;
    this.tagObs.set(newValue);
}.bind({ tagObs: tagObs ));
Run Code Online (Sandbox Code Playgroud)

我不清楚为什么,但这不起作用.它创建了一个无限循环,只是不断增加标记值.

使用AngularFire 2,我应该如何创建或增加节点的值(在这种情况下为"标签")?

@Fiddle评论后更新

这是具有"胖箭头"功能的相同代码.存在同样的问题......无限循环.

let tagName = "angular";
let tagObs = this.af.database.object(`/tags/${tagName}`);
tagObs.subscribe((snapshot) => {
    let newValue = (snapshot.$value) ? (snapshot.$value + 1) : 1;
    tagObs.set(newValue);
});
Run Code Online (Sandbox Code Playgroud)

更新#2:有效的代码

为了清楚起见,这是我最终使用的实际代码:

let tagObs = this.af.database.object(`/tags/${tagName}`);
tagObs.transaction(function(currentCount) {
  return currentCount + 1;
});
Run Code Online (Sandbox Code Playgroud)

angularfire2 angular

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

标签 统计

elixir ×5

phoenix-framework ×3

go ×2

angular ×1

angularfire2 ×1

ecto ×1

git ×1

iex ×1

linux ×1

ssh ×1

testing ×1

webserver ×1