0

鉄筋を使用してリリースアプリケーションを生成し、キーコンソールで起動しようとすると、エラーが発生します

{"initはdo_bootで終了します"、{'cannotload'、pgsql、get_file}}。

すべてのファイルapp.srcとreltool.configに、epgsqlアプリが追加されています。

app.src:

{application, leasing,
 [
  {description, ""},
  {vsn, "1"},
  {registered, []},
  {applications, [
              kernel,
              stdlib,
              crypto,
              ssl,
              public_key,
              epgsql,
              amqp_client,
              rabbit_common
            ]},
{mod, { leasing_app, []}},
{env, []}
]}.

reltool.config

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

  ]}.

{target_dir, "leasingnode"}.

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

erlシェルから起動するとすべて問題ありませんが、リリースを生成するとエラーが発生します。epgsqlアプリをオフにすると、正常に起動し、すべてのアプリ(crypto、ssl、public_keyがロードされます)が表示されますが、epgsqlを再度追加するとエラーが発生します。

私は何が間違っているのですか?

4

1 に答える 1

1

私自身も同じ問題に苦しんでいました。epgsql の依存関係をアプリ ファイルに入れても、そのモジュールをコードで使用しない場合でも、epgsql アプリケーションはリリースに含まれないことがわかりました。これは鉄筋の問題ではないことが判明しました。ボンネットの下の鉄筋は reltool を使用します。これは、実際にリリースを生成する reltool であり、beam ファイルからの情報を使用し、使用されていないアプリケーションを削除しているように思えます。

この問題を解決するために、次の 2 つの方法を考え出しました。

  • を。pgsql:yyy() が機能する場合でも、コードで任意のepgsqlのモジュールを使用してください:)
  • b. {app, epgsql, [{incl_cond, include}]} を reltool.config に追加します。

実際、これは一般的な問題であり、epgsql 固有の問題ではありません。

于 2012-05-18T15:57:01.397 に答える