标签: exrm

依赖项目中的重复协议实现

我在Elixir项目中整合协议实现时遇到问题.更具体地说,我使用了Ecto一些简单的项目Gold(无关紧要).问题是,它们(EctoGold)都Poison用于序列化Decimals(并实现适当的协议).

Ecto外观的实现有点像这样:

defimpl Poison.Encoder, for: Decimal do
    def encode(decimal, _opts), do: <<?", Decimal.to_string(decimal)::binary, ?">>
end
Run Code Online (Sandbox Code Playgroud)

在开发期间,有一个警告说该模块是重复的:

warning: redefining module Poison.Encoder.Decimal (current version loaded from /(...)/_build/dev/lib/gold/ebin/Elixir.Poison.Encoder.Decimal.beam)
  lib/ecto/poison.ex:2
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用例如exrm构建版本时,我会收到错误,说我有duplicate_modules

===> Provider (release) failed with: {error,
                     {rlx_prv_assembler,
                      {release_script_generation_error,
                       systools_make,
                       {duplicate_modules,
                        [{{'Elixir.Poison.Encoder.Decimal',
                           gold,
                           "/(...)/rel/bitcoin_api/lib/gold-0.12.0/ebin"},
                          {'Elixir.Poison.Encoder.Decimal',
                           ecto,
                           "/(...)/rel/bitcoin_api/lib/ecto-2.0.2/ebin"}}]}}}}
Run Code Online (Sandbox Code Playgroud)

我应该怎么处理这个?这里的情况是我实际使用我自己的版本Gold,所以我可以篡改它来尽快解决它.我知道我可以再补充EctoGold作为依赖,但似乎有点矫枉过正,只是实现一个协议是这样的.是否有某种宏来检查模块是否已经实现?

decimal elixir ecto exrm elixir-poison

11
推荐指数
1
解决办法
415
查看次数

在exrm版本中加载文件

我使用html文件作为模板,使用以下代码,在dev模式下工作(不在exrm版本中):

{:ok, template} = File.read "priv/static/templates/receipt_template.html"
Run Code Online (Sandbox Code Playgroud)

当发行版与exrm打包时,此相对路径不再有效,并且找不到该文件.是否有更好的方法来声明路径,以便在将其转换为版本时不会搞砸?

elixir exrm

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

**(CaseClauseError)没有case子句匹配:: eacces - 使用MIX_ENV = prod构建版本

我不知道在哪里放错误,elixir,phoenixframework或nodejs.

我正在尝试使用elxir和phoenix创建我的第一个版本.在发布版本期间,我看到以下错误.我只是不确定这是一个版本/依赖问题还是与nodejs有关的东西,因为我能找到的与eacces相关的唯一信息与nodejs有关系.我的配置中是否有任何遗漏?

这是错误堆栈:

Building release with MIX_ENV=prod.
** (CaseClauseError) no case clause matching: :eacces
lib/exrm/utils/utils.ex:110: ReleaseManager.Utils.relx/5
lib/mix/tasks/release.ex:341: anonymous fn/4 in   Mix.Tasks.Release.do_release/1
lib/ex_unit/capture_io.ex:146: ExUnit.CaptureIO.do_capture_io/2
lib/ex_unit/capture_io.ex:119: ExUnit.CaptureIO.do_capture_io/3
lib/mix/tasks/release.ex:340: Mix.Tasks.Release.do_release/1
lib/mix/tasks/release.ex:78: Mix.Tasks.Release.do_run/1
(mix) lib/mix/task.ex:296: Mix.Task.run_task/3
(mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2
Run Code Online (Sandbox Code Playgroud)

我的环境如下:

$ elixir -v
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.3.4

$ npm --version
3.10.8
Run Code Online (Sandbox Code Playgroud)

我添加exrm之后运行了一些版本问题,我通过添加到我的依赖项解决了以下问题:

 {:exrm, git: "git://github.com/bitwalker/exrm.git"},
 {:relx, github: "erlware/relx", override: true},
 {:erlware_commons, github: "erlware/erlware_commons", override: true},
 {:cf, "~> 0.2.1", override: true}
Run Code Online (Sandbox Code Playgroud)

三个小时后......

我用mix创建了一个新的凤凰项目,可以重现这个问题.一旦我添加了exrm,我得到了同样的错误.我转换到酿酒厂看到同样的错误.我在酿酒厂创造了一个问题,希望能找到解决方案.关于酿酒厂的第142期


编辑:

酿酒厂报告中有关此问题的其他详细信息:

$ …

elixir-mix elixir node.js exrm phoenix-framework

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

在Elixir Exrm中参数化节点名称

我想在一台机器上使用Exrm和Erlang.

我需要创建多个版本,这些版本仅与节点名称不同.

我知道,我可以配置节点名称rel/vm.args,但它将是静态的.我能以某种方式生成具有不同节点名称的多个版本吗?

elixir exrm

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

生产env没有找到OTP模块:使用exrm时的httpc

我正在尝试为我的凤凰框架项目创建一个版本.

一切正常,直到我的代码需要使用来自OTP的httpc模块执行特定操作.

显然exrm,没有捆绑httpc模块,因此无法找到它.

我试图将它添加到我的mix.exs应用程序依赖项中,但是一旦我这样做,就会因为"错误"而拒绝创建发布版本

有谁知道如何解决这一问题 ?

对于mix.env:httpc作为依赖:

$ MIX_ENV=prod mix release --verbosity=vebose                                                        
        Building release with MIX_ENV=prod.
        ==> Generating relx configuration...
        ==> Generating sys.config...
        ==> Generating boot script...
        ==> Packaging consolidated protocols...
        ==> Generating release...
        ===> Starting relx build process ...
        ===> Resolving OTP Applications from directories:
                  /home/morgan/Documents/rateapi/_build/prod/lib
                  /home/morgan/Documents/rateapi/deps
                  /usr/local/lib/elixir/bin/../lib/eex/ebin
                  /usr/local/lib/elixir/bin/../lib/elixir/ebin
                  /usr/local/lib/elixir/bin/../lib/ex_unit/ebin
                  /usr/local/lib/elixir/bin/../lib/iex/ebin
                  /usr/local/lib/elixir/bin/../lib/logger/ebin
                  /usr/local/lib/elixir/bin/../lib/mix/ebin
                  /home/morgan/Documents/rateapi/lib
                  /usr/erlang/otp_R18B03/lib/erlang/lib
                  /home/morgan/Documents/rateapi/rel
        ==> ERROR: "Failed to build release. Please fix any errors and try again."
Run Code Online (Sandbox Code Playgroud)

对于mix.env没有:httpc依赖:

** (exit) an exception was raised:
    ** (UndefinedFunctionError) function …
Run Code Online (Sandbox Code Playgroud)

erlang elixir exrm phoenix-framework

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

Phoenix EXRM发布Websockets无法正常工作

我试图用EXRM发布我的应用程序.除了无法启动的WebSockets之外,整个应用程序正在运行

这是浏览器中的错误(Chrome)

与'ws:// localhost:4001/socket/websocket?token = undefined'的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:403

似乎变量token可能是个问题.一开始Mix phoenix.server就一切顺利.但随着命令发布:

$ mix deps.get
$ mix compile
$ MIX_ENV=prod mix digest
$ MIX_ENV=prod mix release
$ ./rel/project/bin/project
Run Code Online (Sandbox Code Playgroud)

可能是关于我的一些错过的步骤或凤凰相关的问题.

elixir exrm phoenix-framework

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

使用exrm崩溃运行Phoenix应用程序版本

我正在尝试创建一个库存Phoenix应用程序的发布(基于Elixir和Erlang)使用exrm.

dev混合环境的第一个版本创建正常,但在运行时崩溃./rel/my_app/bin/my_app console.这发生在Vagrant/Virtual Box虚拟机中运行Ubuntu 14.04.

在我的Mac上,相同的设置运行正常.不幸的是,我需要在与目标服务器具有相同架构的机器上构建版本,该服务器将运行Ubuntu.

您可以在这里找到该应用程序:https://github.com/mavenastic/my_app.它包括在VM上安装依赖项和创建项目所需的步骤(请参阅参考资料STEPS.md)以及Erlang崩溃转储.

以下是我尝试运行控制台时出现的错误:

{"Kernel pid terminated",application_controller,"{application_start_failure,my_app,{{shutdown,{failed_to_start_child,'Elixir.MyApp.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.CodeReloader.Server',{undef,[{'Elixir.Mix.Project',config,[],[]},{'Elixir.Phoenix.CodeReloader.Server',init,1,[{file,\"lib/phoenix/code_reloader/server.ex\"},{line,29}]},{gen_server,init_it,6,[{file,\"gen_server.erl\"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,\"proc_lib.erl\"},{line,240}]}]}}}}},{'Elixir.MyApp',start,[normal,[]]}}}"}
Run Code Online (Sandbox Code Playgroud)

编辑:

我也尝试为生产环境创建一个版本MIX_ENV=prod mix release.发布成功生成并MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app console运行正常.但是,我无法ping服务器,也无法在启动时运行远程控制台,因此应用程序运行正常似乎仍然缺少.

$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app start
$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app ping

=INFO REPORT==== 24-Oct-2015::10:28:25 ===
Protocol: "inet_tcp": register/listen error: econnrefused
escript: exception error: no match of right hand side value
                 {error,
                     {{shutdown,
                          {failed_to_start_child,net_kernel,
                              {'EXIT',nodistribution}}},
                      {child,undefined,net_sup_dynamic,
                          {erl_distribution,start_link,
                              [['my_app_maint_2551@127.0.0.1',longnames]]},
                          permanent,1000,supervisor,
                          [erl_distribution]}}}

$ ps aux | …
Run Code Online (Sandbox Code Playgroud)

release elixir exrm phoenix-framework

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

何时在Elixir中使用仅编译依赖项

什么时候仅deps在my中指定依赖项mix.exs而不在in中指定运行时依赖项才合适applications

我认为这applications是需要启动的实际应用程序,然后才能启动我自己的应用程序,但是我遇到了一个问题,exrm就是Jazz直到我将包含在内:jazz时,才将库(我认为仅包含纯函数)放到发行版中applications

elixir exrm

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

Elixir exrm在eredis start_link上发布崩溃

我是Elixir的新手,这是我尝试使用exrm发布的第一个应用程序.我的应用程序与Redis数据库交互以从队列中使用作业(使用exq),并使用eredis在Redis中存储已处理作业的结果.

当我运行它时,我的应用程序运行正常iex -S mix,并且在编译成escript时运行也很好.但是当我使用exrm时,应用程序编译时没有任何问题,但是当我运行它时它会崩溃.

这是崩溃输出:

$ ./rel/my_app/bin/my_app console
{"Kernel pid terminated",application_controller,"{application_start_failure,my_app,{bad_return,{{'Elixir.MyApp',start,[normal,[]]},{'EXIT',{{badmatch,{error,{{'EXIT',{{badmatch,{error,{undef,[{eredis,start_link,[],[]},{'Elixir.MyApp.Cache',init,1,[{file,\"lib/my_app/cache.ex\"},{line,8}]},{gen_server,init_it,6,[{file,\"gen_server.erl\"},{line,306}]},{proc_lib,init_p_do_apply,3,[{file,\"proc_lib.erl\"},{line,237}]}]}}},[{'Elixir.MyApp.Cache',start_link,1,[{file,\"lib/my_app/cache.ex\"},{line,21}]},{supervisor,do_start_child,2,[{file,\"supervisor.erl\"},{line,314}]},{supervisor,handle_start_child,2,[{file,\"supervisor.erl\"},{line,685}]},{supervisor,handle_call,3,[{file,\"supervisor.erl\"},{line,394}]},{gen_server,try_handle_call,4,[{file,\"gen_server.erl\"},{line,607}]},{gen_server,handle_msg,5,[{file,\"gen_server.erl\"},{line,639}]},{proc_lib,init_p_do_apply,3,[{file,\"proc_lib.erl\"},{line,237}]}]}},{child,undefined,'Elixir.MyApp.Cache',{'Elixir.MyApp.Cache',start_link,[[{host,\"127.0.0.1\"},{port,6379},{database,0},{password,[]},{reconnect_timeout,100},{namespace,<<>>},{queues,[<<\"elixir\">>]}]]},permanent,5000,worker,['Elixir.MyApp.Cache']}}}},[{'Elixir.MyApp.Supervisor',start_cache,1,[{file,\"lib/my_app/supervisor.ex\"},{line,17}]},{'Elixir.MyApp.Supervisor',start_link,0,[{file,\"lib/my_app/supervisor.ex\"},{line,9}]},{'Elixir.MyApp',start,2,[{file,\"lib/my_app.ex\"},{line,10}]},{application_master,start_it_old,4,[{file,\"application_master.erl\"},{line,272}]}]}}}}}"}
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序的mix.exs:

defmodule MyApp.Mixfile do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "0.0.1",
      name: "MyApp",
      elixir: "~> 1.0",
      escript: escript_config,
      deps: deps
    ]
  end

  def application do
    [
      applications: app_list(Mix.env),
      mod: { MyApp, [] },
      env: [ queue: 'elixir']
    ]
  end

  def included_applications do
    [ :logger, :httpoison, :eredis, :exq, :dotenv, :exjsx, :ex_doc, :oauth2, :sweet_xml ]
  end …
Run Code Online (Sandbox Code Playgroud)

erlang elixir exrm

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

无法启动凤凰发布

昨天我遇到了一个非常奇怪的问题.

组态:

- Erlang 19
- Elixir 1.3.1
- Exrm 1.0.6
- Phoenix 1.2.0
- Ubuntu 15.10
Run Code Online (Sandbox Code Playgroud)

步骤:

  1. 使用编译项目 MIX_ENV=prod mix compile
  2. 使用构建版本 MIX_ENV=prod mix release
  3. 尝试使用测试构建的项目 rel/susu_online/bin/susu_online console

然后我得到一个错误,无法弄清楚为什么会发生这种情况

以下错误:

Erlang/OTP 19 [erts-8.0] [source-6dc93c1] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

10:37:29.758 [error] Supervisor 'Elixir.Logger.Supervisor' had child 'Elixir.Logger.ErrorHandler' started with 'Elixir.Logger.Watcher':watcher(error_logger, 'Elixir.Logger.ErrorHandler', {true,false,500}, link) at <0.1445.0> exit with reason normal in context child_terminated
10:37:29.767 [info] Application lager started on node 'susu_online@127.0.0.1'
10:37:29.767 [info] Application hpack started on node 'susu_online@127.0.0.1'
10:37:29.768 [info] Application …
Run Code Online (Sandbox Code Playgroud)

elixir exrm phoenix-framework

2
推荐指数
1
解决办法
1000
查看次数