bosko

bosko

OTP 25 Ecto Tds connection problem

I am using Ecto Tds to connect to MS SQL server and till today everything worked fine. I am developing on OS X and deploying application on EC2 instance with Ubuntu 20.04. I build release in Docker with following Dockerfile

FROM ubuntu:20.04 as production-environment
ENV LANG=en_US.UTF-8
ENV DEBIAN_FRONTEND noninteractive

RUN \
  apt-get update -y && \
  apt-get install -y git curl wget locales gnupg2 build-essential && \
  locale-gen en_US.UTF-8 && \
  wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb && \
  dpkg -i erlang-solutions_2.0_all.deb && \
  rm erlang-solutions_2.0_all.deb && \
  apt-get update -y && \
  apt-get install -y esl-erlang elixir

CMD ["/bin/bash"]

FROM production-environment as build

# ===========
# Application
# ===========

# prepare build dir
WORKDIR /app

# set build ENV
ENV MIX_ENV=prod

ENV SECRET_KEY_BASE=fake

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
ENV LC_ALL en_US.UTF-8

# install hex + rebar
RUN mix local.hex --force && \
    mix local.rebar --force

# install mix dependencies
COPY mix.exs mix.lock ./
RUN mix deps.get --only $MIX_ENV
RUN mkdir config

# copy compile-time config files before we compile dependencies
# to ensure any relevant config change will trigger the dependencies
# to be re-compiled.
COPY config/config.exs config/${MIX_ENV}.exs config/
RUN mix deps.compile

COPY priv priv

COPY lib lib

COPY assets assets

# build assets
run mix assets.deploy

# compile and build release
RUN mix compile

# Changes to config/runtime.exs don't require recompiling the code
COPY config/runtime.exs config/

COPY rel rel
RUN mix release

FROM scratch AS app

WORKDIR /app
COPY --from=build /app/_build/prod/*.tar.gz ./

CMD ["/bin/bash"]

Today suddenly after deploying new version application stopped working with following error:

[error] GenServer #PID<0.697.0> terminating                                                                       
** (ArgumentError) errors were found at the given arguments:                              
                                                         
  * 1st argument: not a port                                                                                      
                                                                                                                  
    :erlang.port_info(#PID<0.711.0>, :connected)                                                                  
    (elixir 1.13.0) lib/port.ex:273: Port.info/2     
    (tds 2.3.0) lib/tds/tls.ex:86: Tds.Tls.assert_connected!/1
    (tds 2.3.0) lib/tds/tls.ex:41: Tds.Tls.send/2                                                                 
    (tds 2.3.0) lib/tds/tls.ex:209: Tds.Tls.handle_info/2 
    (stdlib 4.0) gen_server.erl:1120: :gen_server.try_dispatch/4                                                                                                                                                                     
    (stdlib 4.0) gen_server.erl:1197: :gen_server.handle_msg/6                                                    
    (stdlib 4.0) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message: {:tcp_closed, #Port<0.46>}
State: %Tds.Tls{buffer: nil, handshake?: true, owner_pid: #PID<0.711.0>, socket: #Port<0.46>, ssl_opts: [active: false, cb_info: {Tds.Tls, :tcp, :tcp_closed, :tcp_error}]}

After short investigation I found out that build in Docker used OTP 25 while on my local machine I was still using OTP 24 and installing Elixir 1.13.4-otp-25 resulted in the same error.

I was not able to find any issue related to this reported on Tds so I wonder if anyone have noticed similar problem or has an idea what could cause this error?

Most Liked

moogle19

moogle19

Hi @bosko
I just pushed a small fix for your problem to the master branch.
Could you try it? Just switch your dep in mix.exs to {:tds, github: "elixir-ecto/tds"}.

If you have problems in the future, just open up an issue on the GitHub repo. It will be more visible there.

gregvaughn

gregvaughn

We had to abort an upgrade to OTP 25 because of failures negotiating a TLS connection with a Windows server. That might be the same root cause here. Looks like a fix has been merged for OTP now
https://github.com/erlang/otp/pull/6037

Where Next?

Popular in Questions Top

sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
JulienCorb
I am trying to implement my new.html.eex file to create new posts on my website. new.html.eex: &lt;h1&gt;Create Post&lt;/h1&gt; &lt;%= ...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: The documentation above suggests that while ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Other popular topics Top

danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29377 241
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 43622 214
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36128 110
New
boundedvariable
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

We're in Beta

About us Mission Statement