小编asi*_*niy的帖子

64
推荐指数
3
解决办法
5万
查看次数

Rails与实时通知架构

我需要向我的Rails应用添加实时通知.以下是我发现的不同架构.

1.导轨+ Socket.io + Redis的:如所建议的在该中,具有以下结构:

Rails + Socket.io + Redis

  • Pro:清理,如果Socket.io关闭,数据不会丢失
  • Con:介绍几种技术(加强可维护性)

2. Rails + Socket.io:使Rails成为一个Socket.io客户端,就像这个repo似乎做的那样:https://github.com/lyondhill/socket.io-ruby-client

Rails + Socket.io

  • :直截了当
  • 骗局:依靠不受欢迎的图书馆

3. Ruby Faye:http://faye.jcoglan.com/ruby.html

  • :100%Ruby
  • Con:由于需要外部应用程序,Socket.io现在比Faye更像行业标准.

4. ActionController :: Live:http://edgeapi.rubyonrails.org/classes/ActionController/Live.html

  • Pro:应用程序中的Rails
  • 骗局:太不成熟了

问题:

  • 现在有没有一种标准的方式(我已经错过了)?
  • 对我的比较有任何想法(希望这不会被关闭)?

sockets ruby-on-rails websocket actioncable

25
推荐指数
1
解决办法
2907
查看次数

git从pull请求中删除提交

我是开源贡献的新手,所以这是我的第一次尝试.

我开发了一个名为validates:https : //github.com/kaize/validates/的库(gem)

我做了两个分支git checkout -b branch_name:

https://github.com/kaize/validates/pull/20&https://github.com/kaize/validates/pull/19,并为它们提交,但是,你可以看到ip-validator pull请求有提交Blank validator 399cdd7.

我需要做什么才能从拉取请求中删除它(并且仍然放在空白验证器分支中)?

伙计们,请帮助我让世界更美好!

git git-rebase git-cherry-pick

23
推荐指数
1
解决办法
3万
查看次数

elixir - 如何获取列表中除最后一个之外的所有元素?

假设我有一个清单 [1, 2, 3, 4]

除了最后一个,如何从此列表中获取所有元素?所以,我会的[1, 2, 3]

elixir

19
推荐指数
3
解决办法
4564
查看次数

如何让我的测试在Jest中待定?

我想让我的一些jest测试待定.我该怎么做?API参考没有任何方法我如何使我的测试挂起.

javascript testing jestjs

18
推荐指数
4
解决办法
6810
查看次数

有没有办法在凤凰城定义自定义路线?

假设我想创建一个resources向它添加几个自定义动作,rails中的模拟是:

resources :tasks do
  member do
    get :implement
  end
end
Run Code Online (Sandbox Code Playgroud)

这不仅会给我带来7条标准路线,还会带来1条新路线:

GET /tasks/:id/implement
Run Code Online (Sandbox Code Playgroud)

我怎么能在凤凰城做到这一点?

elixir phoenix-framework

17
推荐指数
3
解决办法
4743
查看次数

如何在elixir中获取结构名称?

假设我有一个结构,struct = %MyApp.MyModel{ filled_with_data: "true }.

我如何获得结构名称(MyApp.MyModel在我的情况下)?

elixir

15
推荐指数
2
解决办法
3294
查看次数

如何在凤凰中使用会话连接?

我有一个身份验证插件,我想测试我的控制器.问题是这个插头中的线路有

user_id = get_session(conn, :user_id)
Run Code Online (Sandbox Code Playgroud)

当我使用这种方法时,它总是零(我以前使用过脏黑客,但我不想再这样做了):

  @session  Plug.Session.init([
    store:            :cookie,
    key:              "_app",
    encryption_salt:  "secret",
    signing_salt:     "secret",
    encrypt:          false
  ])

user = MyApp.Factory.create(:user)

conn()
|> put_req_header("accept", "application/vnd.api+json")
|> put_req_header("content-type", "application/vnd.api+json")
|> Map.put(:secret_key_base, String.duplicate("abcdefgh", 8))
|> Plug.Session.call(@session)
|> fetch_session
|> put_session(:user_id, user.id)
Run Code Online (Sandbox Code Playgroud)

我正在使用此conn发送补丁请求,其会话user_id为nil.IO.puts conn在我的插件中的结果:

%Plug.Conn{adapter: {Plug.Adapters.Test.Conn, :...}, assigns: %{},
 before_send: [#Function<0.111117999/1 in Plug.Session.before_send/2>,
  #Function<0.110103833/1 in JaSerializer.ContentTypeNegotiation.set_content_type/2>,
  #Function<1.55011211/1 in Plug.Logger.call/2>,
  #Function<0.111117999/1 in Plug.Session.before_send/2>], body_params: %{},
 cookies: %{}, halted: false, host: "www.example.com", method: "PATCH",
 owner: #PID<0.349.0>,
 params: %{"data" => %{"attributes" => %{"action" …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework ex-unit

12
推荐指数
1
解决办法
2427
查看次数

如何处理poolboy中的超时?

我有一个长时间消耗迁移的问题,我希望在并行运行(它可以在并行运行).实际上,迁移是关于获取数据库中的所有记录,并对每个记录执行耗费时间和资源的操作.

有时单个记录迁移挂出,所以我给10分钟完成.如果迁移没有完成,我希望它正常关闭,没有任何例外(见下文)

我也使用poolboy erlang包来并行化实现,因为迁移不仅消耗时间,而且消耗资源.问题是我不知道如何在发生超时并且代码将要中断时处理错误.我的监督树是:

defmodule MyReelty.Repo.Migrations.MoveVideosFromVimeoToB2 do
  use Ecto.Migration

  alias MyReelty.Repo
  alias MyReelty.Repo.Migrations.MoveVideosFromVimeoToB2.Migrator

  # parallel nature of migration force us to disable transaction
  @disable_ddl_transaction true

  @migrator_waiting_time 10 * 60 * 1000 # timeout
  @poolboy_waiting_time @migrator_waiting_time + 10 * 1000 # give a time for graceful shutdown

  @pool_name :migrator
  @pool_size 3
  @pool_config [
    { :name, { :local, @pool_name }},
    { :worker_module, Migrator },
    { :size, @pool_size },
    { :max_overflow, 0 },
    { :strategy, :fifo }
  ]

  def up do
    children …
Run Code Online (Sandbox Code Playgroud)

erlang elixir gen-server actor

12
推荐指数
1
解决办法
1443
查看次数

Elixir - 如何深度合并地图?

随着Map.merge我有:

Map.merge(%{ a: %{ b: 1 }}, %{ a: %{ c: 3 }}) # => %{ a: %{ c: 3 }}
Run Code Online (Sandbox Code Playgroud)

但实际上我想:

Map.merge(%{ a: %{ b: 1 }}, %{ a: %{ c: 3 }}) # => %{ a: %{ b: 1, c: 3 }}
Run Code Online (Sandbox Code Playgroud)

有没有为这种情况编写递归样板函数的本机方法?

elixir

11
推荐指数
2
解决办法
3126
查看次数