2012-02-24 56 views
2

我有一個奇怪的問題,使用螺紋鋼構建我正在使用的erlang應用程序的版本。從本質上講,它似乎無法找到安裝在我的系統上的erlang節儉客戶端。我可以從二郎提示加載節儉應用驗證這一點:當我嘗試運行「鋼筋產生」打造我的應用程序的發佈'鋼筋生成'不包括生成版本中的一些依賴關係

$ erl 
Erlang R14B04 (erts-5.8.5) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false] 

Eshell V5.8.5 (abort with ^G) 
1> application:load(thrift). 
ok 
2> application:loaded_applications(). 
[{kernel,"ERTS CXC 138 10","2.14.5"}, 
{thrift,"Thrift bindings","0.9.0-dev"}, 
{stdlib,"ERTS CXC 138 10","1.17.5"}] 
3> 

但是,它失敗:

$ rebar generate 
==> rel (generate) 
{"init terminating in do_boot","Release fern uses non existing application thrift"} 

Crash dump was written to: erl_crash.dump 
init terminating in do_boot (Release fern uses non existing application thrift) 

這是我的應用程序文件,fern.app.src:

{application, fern, [ 
    {description, "elided"}, 
    {vsn, "0.5.0"}, 
    {modules, [ 
    fern_app, 
    fern_sup, 
    accounts_repository, 
    fern_http_request, 
    fern_system_api, 
    metadata_fetcher, 
    metadata_process, 
    repository, 
    repository_server, 
    timestamps_repository, 
    hbase_thrift, 
    hbase_types, 
    utils 
    ]}, 
    {registered, [ 
    fern_sup 
    ]}, 
    {applications, [ 
    kernel, 
    stdlib, 
    inets, 
    ssl 
    ]}, 
    {mod, { fern_app, []}}, 
    {env, []}, 
    {agner, [ 
    {requires, ["jiffy", "meck", "mochiweb"]} 
    ]} 
]}. 

...和我reltool.config:

{sys, [ 
     {lib_dirs, ["../apps", "../deps"]}, 
     {erts, [{mod_cond, derived}, {app_file, strip}]}, 
     {app_file, strip}, 
     {rel, "fern", "1", 
     [ 
     kernel, 
     stdlib, 
     sasl, 
     ssl, 
     inets, 
     thrift, 
     fern 
     ]}, 
     {rel, "start_clean", "", 
     [ 
     kernel, 
     stdlib 
     ]}, 
     {boot_rel, "fern"}, 
     {profile, embedded}, 
     {incl_cond, exclude}, 
     {excl_archive_filters, [".*"]}, %% Do not archive built libs 
     {excl_sys_filters, ["^bin/.*", "^erts.*/doc", "^erts.*/src", 
          "^erts.*/info", "^erts.*/man", 
          "^erts.*/lib", "^erts.*/include", 
          "^erts.*/bin/(dialyzer|typer)"]}, 
     {excl_app_filters, ["\.gitignore"]}, 
     {app, sasl, [{incl_cond, include}]}, 
     {app, stdlib, [{incl_cond, include}]}, 
     {app, kernel, [{incl_cond, include}]}, 
     {app, inets, [{incl_cond, include}]}, 
     {app, crypto, [{incl_cond, include}]}, 
     {app, public_key, [{incl_cond, include}]}, 
     {app, ssl, [{incl_cond, include}]}, 
     {app, thrift, [{incl_cond, include}]}, 
     {app, fern, [{incl_cond, include}]} 
     ]}. 

{target_dir, "fern"}. 

{overlay, [ 
      {mkdir, "log/sasl"}, 
      {copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"}, 
      {copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"}, 
      {copy, "files/fern", "bin/fern"}, 
      {copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"}, 
      {copy, "files/fern.cmd", "bin/fern.cmd"}, 
      {copy, "files/start_erl.cmd", "bin/start_erl.cmd"}, 
      {copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"} 
      ]}. 

我應該注意到,如果我從兩個應用程序列表中刪除節點,則該版本會生成但不包含節儉庫,因此在運行時會失敗。任何人都可以向我提供關於我在這裏做錯了什麼的任何指導?

非常感謝,

回答

4

對於其他人誰碰到這個來的緣故 - 我終於摸索出了問題。出於某種原因,rebar在發佈版中將'thrift'應用程序重命名爲'thrift-0.9.0-dev'。將上述配置中的原子'thrift'的所有實例更改爲'thrift-0.9.0-dev'(注意這是一個原子,而不是字符串 - 使用單引號)會將其整理出來。