Sql server 针对不同目标发布的ERT包括

Sql server 针对不同目标发布的ERT包括,sql-server,odbc,elixir,Sql Server,Odbc,Elixir,我想知道是否有人能帮忙 我试图从Elixir应用程序中连接到MS SQL Server,但收到错误:odbc.start/0未定义(模块:odbc不可用) 在我的Mac上,我安装了带有ODBC支持的Erlang,一切都很好,但是当我在Ubuntu服务器(我为其安装了Erlang ODBC,并且在构建的地方)上部署Divertery和edeliver时,它失败了。我还尝试不包括ERT,并在我的机器上复制Erlang的lib后在本地构建它,但都没有效果 这是edeliver配置文件的一个片段: BU

我想知道是否有人能帮忙

我试图从Elixir应用程序中连接到MS SQL Server,但收到错误
:odbc.start/0未定义(模块:odbc不可用)

在我的Mac上,我安装了带有ODBC支持的Erlang,一切都很好,但是当我在Ubuntu服务器(我为其安装了Erlang ODBC,并且在构建的地方)上部署Divertery和edeliver时,它失败了。我还尝试不包括ERT,并在我的机器上复制Erlang的lib后在本地构建它,但都没有效果

这是edeliver配置文件的一个片段:

BUILD_HOST="search-dev"
BUILD_USER="ubuntu"
BUILD_AT="/home/ubuntu/app_build"

STAGING_HOSTS="search-dev search-demo"
STAGING_USER="ubuntu"
TEST_AT="/home/ubuntu/app_release"
...
更新 mix.exs

defmodule SearchService.Mixfile do
  use Mix.Project

  def project do
    [
      app: :search_service,
      version: "0.9.0",
      elixir: "~> 1.7",
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: [:phoenix, :gettext] ++ Mix.compilers(),
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps()
    ]
  end

  def application do
    [
      mod: {SearchService.Application, []},
      extra_applications: [
        :logger,
        :timex,
        :geo,
        :geo_postgis,
        :postgrex,
        :ecto,
        :runtime_tools,
        :distillery,
        :edeliver,
        :ssl,
        :httpoison
      ]
    ]
  end

  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_), do: ["lib"]

  defp deps do
    [
      {:phoenix, "~> 1.4.0", override: true},
      {:phoenix_pubsub, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"},
      {:plug, "~> 1.7"},
      {:jason, "~> 1.1"},
      {:ecto_sql, "~> 3.0"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_ecto, "~> 4.0"},
      {:phoenix_html, "~> 2.10"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:elixir_uuid, "~> 1.2"},
      {:gettext, "~> 0.11"},
      {:cowboy, "~> 2.5"},
      {:scrivener_ecto, "~> 2.0"},
      {:erlport, "~> 0.10.0"},
      {:export, "~> 0.1.0"},
      {:cors_plug, "~> 1.2"},
      {:plug_static_index_html, "~> 1.0"},
      {:geo_postgis, "~> 2.0"},
      {:geo, "~> 3.0"},
      {:blue_bird, "~> 0.4"},
      {:edeliver, "~> 1.7"},
      {:distillery, "~> 2.1"},
      {:inflex, "~> 1.8.1"},
      {:guardian, "~> 1.0"},
      {:comeonin, "~> 4.0"},
      {:argon2_elixir, "~> 1.2"},
      {:elixlsx, "~> 0.4.0"},
      {:quantum, "~> 2.3"},
      {:timex, "~> 3.1"},
      {:httpoison, "~> 1.0"},
      {:sweet_xml, "~> 0.6.5"},
      {:math, "~> 0.3.0"},
      {:color_utils, "0.2.0"},
      {:paper_trail, "~> 0.8.1"},
      {:ex_aws, "~> 2.1"},
      {:ex_aws_s3, "~> 2.0"},
      {:ex_aws_lambda, "~> 2.0"},
      {:hackney, "~> 1.9"},
      {:policy_wonk, "~> 1.0.0"}
    ]
  end

  defp aliases do
    [
      "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
      "ecto.reset": ["ecto.drop", "ecto.setup"],
      test: ["ecto.create --quiet -r SearchService.Repo", "ecto.migrate -r SearchService.Repo", "test"]
    ]
  end

  def blue_bird_info do
    [
      host: "https://search_service.com",
      title: " Search API",
      description: """
        API requires authorization. All requests must have valid authorization header containing token like:

        `Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9...`
      """
    ]
  end
end
我希望:odbc模块可用,从而允许我连接到SQLServer,而当我在服务器上运行远程控制台时,我得到了

Interactive Elixir (1.9.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(search_service@127.0.0.1)1> SearchService.WorkOrderSyncOut.createWO('c765bc7f-6308-42b3-b5da-647830d5cceb')
** (UndefinedFunctionError) function :odbc.start/0 is undefined (module :odbc is not available)
    :odbc.start()
    (search_service) lib/search_service/sync/odbc.ex:5: SearchService.ODBC.start_link/2
    (search_service) lib/search_service/sync/db_connect.ex:45: SearchService.DBConnect.getMSSQLConnection/0
    (search_service) lib/search_service/sync/work_order_sync_out.ex:7: SearchService.WorkOrderSyncOut.createWO/1

提前感谢您的指点

要将应用程序包括到发行版中,就应该明确地这样做

def application do
  [
      mod: {SearchService.Application, []},
      included_applications: [:odbc], # ⇐ THIS
      extra_applications: [:logger, ...]
  ]
end
该版本不同于本地运行,因为在本地您仍然可以编译包,并且
mix
runner可以看到相应的
.beam

产品构建已打包,并且该包仅包括那些明确指定的应用程序/库


旁注:尝试从发行版代码中调用
Mix.env()
或类似程序失败的方式与此完全相同,因为默认情况下,
Mix
应用程序也不包括在发行版中。

请共享您的
Mix.exs
和完整的堆栈跟踪。尝试添加
包含的应用程序:[:odbc]
进入
def应用程序do
。如果没有帮助,请将其放入
extra\u应用程序
列表中。默认情况下,该版本不会包括您机器上的所有内容。@AlekseiMatiushkin非常感谢您,确实
包含了应用程序:[:odbc]
解决了这个问题。如果你想回答这个问题,我会同意的:-)