Я очень новичок во всех этих Google App Engine и odbc FreeTDS. Мне нужно подключиться к базе данных MSSQL флягой из API, используя движок приложения. Я не уверен, каков путь к odbcinst.ini на платформе может, или я должен отдельно загрузить odbcinst.ini в облако.
Если я загружаю obdcinst.ini
самостоятельно, ошибка будет 00081 unable to connect the database
. Если я повторяю odbcinst.ini
в dockerfile
, ошибка
Шаг 12/16: ADD odbcinst.ini /etc/odbcinst.ini
ADD failed: stat /var/lib/docker/tmp/docker-builder250249342/odbcinst.ini: no such file or directory
ERROR
Dockerfile:
FROM gcr.io/google-appengine/python
# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
# Use -p python3 or -p python3.7 to select python version. Default is version 2.
RUN virtualenv /env -p python3.7
# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
#Install FreeTDS and dependencies for PyODBC
RUN apt-get update && \
apt-get install -y tdsodbc unixodbc-dev && \
apt-get install freetds-dev freetds-bin tdsodbc -y && \
apt install unixodbc-bin -y && \
apt-get clean -y
#RUN odbcinst -i -d -f /etc/odbcinst.ini
RUN echo "[FreeTDS]\n\
Description = FreeTDS unixODBC Driver\n\
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so\n\
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so" >> /etc/odbcinst.ini
#ADD odbcinst.ini /etc/odbcinst.ini
# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
# Install any needed packages specified in requirements.txt
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
# Copy the current directory contents into the container at /app
ADD algorithm_2.py algorithm_2.py
ADD main.py main.py
# Run app.py when the container launches
CMD ["python", "main.py"]
main.py:
@app.route('/v2/agent/<name>/<address>/<type>/<price>')
def Somefunction(name, address, type, price):
import pyodbc
con = pyodbc.connect('DRIVER={FreeTDS};'
'SERVER=xxxx.database.windows.net;'
'DATABASE=xxxx;'
'UID=xxxx;'
'PWD=xxxx;'
'TDS_Version = 8.0;')
df_input = pd.read_sql(
'SELECT xxxx
' FROM xxxx '
' LEFT JOIN xxxxx)
con.commit()
app.yaml:
runtime: custom
#entrypoint: gunicorn -b :$PORT main:app
env: flex
manual_scaling:
instances: 1
service: s2
The obdcinst.ini:
[FreeTDS]
Description=FreeTDS Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
TDS_Version = 8.0
Если кто-нибудь сможет мне помочь, это будет здорово. Спасибо.