Sql server 针对不同目标发布的ERT包括
我想知道是否有人能帮忙 我试图从Elixir应用程序中连接到MS SQL Server,但收到错误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
: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]
解决了这个问题。如果你想回答这个问题,我会同意的:-)