Driver 'python' isn't loaded

I have tried using the python rich plugin with TYK on docker.
The api works but the middleware doesn’t.
TYK outputs the following message:

level=error msg=“Driver ‘python’ isn’t loaded” prefix=coprocess

tyk.conf:

{
“listen_address”: “”,
“listen_port”: 8080,
“secret”: “352d20ee67be67f6340b4c0605b044b7”,
“template_path”: “/opt/tyk-gateway/templates”,
“use_db_app_configs”: false,
“app_path”: “/opt/tyk-gateway/apps”,
“middleware_path”: “/opt/tyk-gateway/middleware”,
“storage”: {
“type”: “redis”,
“host”: “localhost”,
“port”: 6379,
“username”: “”,
“password”: “”,
“database”: 0,
“optimisation_max_idle”: 2000,
“optimisation_max_active”: 4000
},
“enable_analytics”: false,
“analytics_config”: {
“type”: “”,
“ignored_ips”: []
},
“dns_cache”: {
“enabled”: false,
“ttl”: 3600,
“check_interval”: 60
},
“allow_master_keys”: false,
“policies”: {
“policy_source”: “file”
},
“coprocess_options”: {
“enable_coprocess”: true,
“python_path_prefix”: “/opt/tyk-gateway”
},
“hash_keys”: true,
“suppress_redis_signal_reload”: false,
“force_global_session_lifetime”: false,
“max_idle_connections_per_host”: 500
}

API definition:

{
“name”: “Tyk Test API”,
“api_id”: “1”,
“org_id”: “default”,
“definition”: {
“location”: “header”,
“key”: “version”
},
“use_keyless”: true,
“auth”: {
“auth_header_name”: “authorization”
},
“version_data”: {
“not_versioned”: true,
“versions”: {
“Default”: {
“name”: “Default”,
“expires”: “3000-01-02 15:04”,
“use_extended_paths”: true,
“extended_paths”: {
“ignored”: [],
“white_list”: [],
“black_list”: []
}
}
}
},
“custom_middleware”: {
“pre”: [
{
“name”: “PreHook”,
“path”: “./bundles/middleware.py”
}
],
“driver”: “python”
},
“proxy”: {
“listen_path”: “/v/”,
“target_url”: “https://www.google.com”,
“strip_listen_path”: true
},
“enable_batch_request_support”: true
}

middleware.py:

from tyk.decorators import *
from gateway import TykGateway as tyk
from time import time

@Hook
def PreHook(request, session, spec):
tyk.log(“PreHook is called”, “info”)
# Inject a header:
request.add_header(“testheader”, “testvalue”)
return request, session

@Hook
def ResponseHook(request, response, session, metadata, spec):
tyk.log(“ResponseHook is called”, “info”)
# In this hook we have access to the response object, to inspect it, uncomment the following line:
# print(response)
tyk.log(“ResponseHook: upstream returned {0}”.format(response.status_code), “info”)
return response

Also when I use the ResponseHook
with the following definition:
“response”: [
{
“name”: “ResponseHook”,
“path”: “./bundles/middleware.py”
}
],

The middleware still don’t work and no error output message is written.

Is something wrong with this configuration?
Or maybe my docker image is missing something?

Thanks in advence.

Hi, could you share a full gateway log in debug mode?

  1. Set “log_level” to “debug” in tyk.conf, alternatively you can set the TYK_LOGLEVEL environment variable to “debug”.
  2. Start the gateway and copy the full log. Paste it here.

Regards.

Hi guys!
Any news about this error?
I am experiencing the same

Hi Yegor

To help us get to the bottom of this please could you share with us your gateway log in debug mode as per the request that Matiasb posted above?

@Andrew ,
I’m suffered from the same issue(“Driver ‘python’ isn’t loaded” prefix=coprocess).
Here are tyk log on my environment. Any help appreciated.

Oct 28 18:24:43 5f964e2c40a0 systemd[1]: Started Tyk API Gateway.
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Tyk API Gateway v3.2.2" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Notifier will not work in hybrid mode" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="PIDFile location set to: /var/run/tyk/tyk-gateway.pid" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="No Primary instance found, assuming control" prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Starting Poller" prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=warning msg="The control_api_port should be changed for production" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="---> Initialising checker" prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Initialising default org store" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Config:TriggerLimit: 3"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Config:Timeout: ~10"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Config:WorkerPool: 8"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Initialising Tyk REST API Endpoints" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Init complete"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="---> Starting checker" prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Starting..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Check loop started..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Host reporter started..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="---> Checker started." prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Connecting to redis cluster"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Creating new Redis connection pool"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="--> [REDIS] Creating single-node client"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Loaded API Endpoints" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="--> Standard listener (http)" port=":8080" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=warning msg="Starting HTTP server on:[::]:8080" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Initialising distributed rate limiter" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="DRL: Setting node ID: solo-c0a92d40-803b-4ea9-845b-3a4e35f520e8|5f964e2c40a0"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Tyk Gateway started (v3.2.2)" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="--> Listening on address: (open interface)" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="--> Listening on port: 8080" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="--> PID: 849" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Loading policies" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="No policy record name defined, skipping..." prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Loading API Specification from /opt/tyk-gateway/apps/Hello-World.json"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Starting gateway rate limiter notifications..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Connecting to redis cluster"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Creating new Redis connection pool"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="--> [REDIS] Creating single-node client"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Connecting to redis cluster"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Creating new Redis connection pool"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="--> [REDIS] Creating single-node client"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Checking for transform paths..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Checking for transform paths..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Loading API Specification from /opt/tyk-gateway/apps/app_sample.json"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Checking for transform paths..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Checking for transform paths..."
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Detected 2 APIs" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Loading API configurations." prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Tracking hostname" api_name="Tyk Test API" domain="(no host)" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Tracking hostname" api_name=Hello-World domain="(no host)" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Initialising Tyk REST API Endpoints" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Loaded API Endpoints" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="API bind on custom port:0" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Initializing API" api_id=1 api_name="Tyk Test API" org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Batch requests enabled for API" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=VersionCheck org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=RateCheckMW org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Checking security policy: Token" api_id=1 api_name="Tyk Test API" org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=AuthKey org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=KeyExpired org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=AccessRightsCheck org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=GranularAccessMiddleware org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=RateLimitAndQuotaCheck org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=VersionCheck org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=KeyExpired org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=1 api_name="Tyk Test API" mw=AccessRightsCheck org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Rate limit endpoint is: /tyk-api-test/tyk/rate-limits" api_id=1 api_name="Tyk Test API" org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Setting Listen Path: /tyk-api-test/" api_id=1 api_name="Tyk Test API" org_id=default
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="API Loaded" api_id=1 api_name="Tyk Test API" org_id=default prefix=gateway server_name=-- user_id=-- user_ip=--
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="API bind on custom port:0" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Initializing API" api_id=Hello-World api_name=Hello-World org_id=1
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Loading custom PRE-PROCESSOR middleware: PreHook" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Checking security policy: Open" api_id=Hello-World api_name=Hello-World org_id=1
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Registering coprocess middleware, hook name: PreHookhook type: Pre, driver: python" api_id=Hello-World api_name=Hello-World org_id=1 prefix=coprocess
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=error msg="Driver 'python' isn't loaded" prefix=coprocess
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=Hello-World api_name=Hello-World mw=VersionCheck org_id=1
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg=Init api_id=Hello-World api_name=Hello-World mw=RateCheckMW org_id=1
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Setting Listen Path: /hello-world/" api_id=Hello-World api_name=Hello-World org_id=1
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="API Loaded" api_id=Hello-World api_name=Hello-World org_id=1 prefix=gateway server_name=-- user_id=-- user_ip=--
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Checker host list" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Loading uptime tests..." prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="--- Setting tracking list up" prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Reset initiated" prefix=host-check-mgr
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="[HOST CHECKER] Checker reset queued!"
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=debug msg="Checker host Done" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="Initialised API Definitions" prefix=main
Oct 28 18:24:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:43" level=info msg="API reload complete" prefix=main
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg=Started api_id=Hello-World api_name=Hello-World mw=VersionCheck org_id=1 origin=127.0.0.1 path="/hello-world/get" ts=1635413086385917045
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg=Finished api_id=Hello-World api_name=Hello-World code=200 mw=VersionCheck ns=47746 org_id=1 origin=127.0.0.1 path="/hello-world/get"
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg=Started api_id=Hello-World api_name=Hello-World mw=RateCheckMW org_id=1 origin=127.0.0.1 path="/hello-world/get" ts=1635413086385997464
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg=Finished api_id=Hello-World api_name=Hello-World code=200 mw=RateCheckMW ns=75688 org_id=1 origin=127.0.0.1 path="/hello-world/get"
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Started proxy"
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Stripping: /hello-world/"
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Upstream Path is: get"
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg=Started api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1 ts=1635413086386105005
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Upstream request URL: get?hoge=piyo" api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Outbound request URL: http://echo.tyk-demo.com:8080/get?hoge=piyo" api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Creating new transport" api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Out request url: http://echo.tyk-demo.com:8080/get?hoge=piyo" api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg=Finished api_id=Hello-World api_name=Hello-World mw=ReverseProxy ns=515281677 org_id=1
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Upstream request took (ms): 515.337388"
Oct 28 18:24:46 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:46" level=debug msg="Done proxy"
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg=Started api_id=Hello-World api_name=Hello-World mw=VersionCheck org_id=1 origin=127.0.0.1 path="/hello-world/get" ts=1635413087924347871
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg=Finished api_id=Hello-World api_name=Hello-World code=200 mw=VersionCheck ns=41171 org_id=1 origin=127.0.0.1 path="/hello-world/get"
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg=Started api_id=Hello-World api_name=Hello-World mw=RateCheckMW org_id=1 origin=127.0.0.1 path="/hello-world/get" ts=1635413087924400238
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg=Finished api_id=Hello-World api_name=Hello-World code=200 mw=RateCheckMW ns=8361 org_id=1 origin=127.0.0.1 path="/hello-world/get"
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg="Started proxy"
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg="Stripping: /hello-world/"
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg="Upstream Path is: get"
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg=Started api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1 ts=1635413087924424184
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg="Upstream request URL: get?hoge=piyo" api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1
Oct 28 18:24:47 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:47" level=debug msg="Outbound request URL: http://echo.tyk-demo.com:8080/get?hoge=piyo" api_id=Hello-World api_name=Hello-World mw=ReverseProxy org_id=1
Oct 28 18:24:48 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:48" level=debug msg=Finished api_id=Hello-World api_name=Hello-World mw=ReverseProxy ns=189853121 org_id=1
Oct 28 18:24:48 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:48" level=debug msg="Upstream request took (ms): 189.903568"
Oct 28 18:24:48 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:48" level=debug msg="Done proxy"
Oct 28 18:24:52 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:52" level=debug msg="[HOST CHECKER] Host list reset"
Oct 28 18:24:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:53" level=warning msg="Reconnecting storage: Redis is either down or ws not configured" prefix=pub-sub
Oct 28 18:24:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:53" level=debug msg="Error trying to get value:redis: nil"
Oct 28 18:24:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:24:53" level=debug msg="No Primary instance found, assuming control" prefix=host-check-mgr
Oct 28 18:25:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:25:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:25:08 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:25:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:25:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:25:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:25:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:25:33 5f964e2c40a0 tyk[849]: time="Oct 28 18:25:33" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:25:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:25:43" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:25:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:25:53" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:26:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:26:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:26:09 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:26:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:26:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:26:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:26:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:26:33 5f964e2c40a0 tyk[849]: time="Oct 28 18:26:33" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:26:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:26:43" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:26:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:26:53" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:27:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:27:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:27:11 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:27:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:27:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:27:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:27:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:27:33 5f964e2c40a0 tyk[849]: time="Oct 28 18:27:33" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:27:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:27:43" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:27:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:27:53" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:28:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:28:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:28:12 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:28:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:28:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:28:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:28:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:28:33 5f964e2c40a0 tyk[849]: time="Oct 28 18:28:33" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:28:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:28:43" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:28:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:28:53" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:29:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:29:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:29:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:29:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:29:13 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:29:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:29:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:29:33 5f964e2c40a0 tyk[849]: time="Oct 28 18:29:33" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:29:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:29:43" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:29:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:29:53" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:30:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:30:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:30:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:30:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:30:15 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:30:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:30:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:30:33 5f964e2c40a0 tyk[849]: time="Oct 28 18:30:33" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:30:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:30:43" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:30:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:30:53" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:31:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:31:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:31:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:31:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:31:16 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:31:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:31:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:31:33 5f964e2c40a0 tyk[849]: time="Oct 28 18:31:33" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:31:43 5f964e2c40a0 tyk[849]: time="Oct 28 18:31:43" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:31:53 5f964e2c40a0 tyk[849]: time="Oct 28 18:31:53" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:32:03 5f964e2c40a0 tyk[849]: time="Oct 28 18:32:03" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:32:13 5f964e2c40a0 tyk[849]: time="Oct 28 18:32:13" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr
Oct 28 18:32:17 5f964e2c40a0 WSL2: Performing memory compaction.
Oct 28 18:32:23 5f964e2c40a0 tyk[849]: time="Oct 28 18:32:23" level=debug msg="Primary instance set, I am master" prefix=host-check-mgr

Hi @taka-t, welcome to the community.

Have you taken a look at this other thread Python middleware error when trying example from documentation - Support - Tyk API Management Community Forum. I think it was suggested to try using a plugin bundle

Hello, @Olu

I tried plugin bundle and seems to occur other issues as below:
It reads “No module named ‘google’”

Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=info msg="Loading existing bundle: test.zip" prefix=main
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=info msg="----> Loading bundle: test.zip" prefix=main
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=info msg="----> Using bundle: test.zip" prefix=main
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=debug msg="Found python-config binary: 3.0 (/usr/bin/python3-config)" prefix=dlpython
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=debug msg="Found python-config binary: 3.6 (/usr/bin/python3.6-config)" prefix=dlpython
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=debug msg="Using latest Python version" prefix=dlpython
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=debug msg="Selected Python configuration path: /usr/bin/python3.6-config" prefix=dlpython
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=debug msg="Selected Python library path: /usr/lib64/libpython3.6m.so" prefix=dlpython
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=info msg="Python version '3.6' loaded" prefix=coprocess
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=error msg="No module named 'google'" prefix=python
Oct 28 19:18:37 5f964e2c40a0 tyk[1370]: time="Oct 28 19:18:37" level=fatal msg="Couldn't initialize Python dispatcher" prefix=coprocess

Could you give any advice on that?

Regards,

Hi @taka-t ,

You will need to vendor any dependencies within your bundle.
It’s as simple as creating a requirements.txt file and running pip3 install -r requirements.txt --prefix vendor

You may need to manually add the vendor directory to the bundle.zip with something like this:
zip -ur ${bundle}.zip vendor/

Also be aware that you need to be careful about loading these import within your python scripts.
I use this sort of thing

bundle_dir = os.path.abspath(os.path.dirname(__file__))
for lib_dir in [ 'vendor/lib/python3.7/site-packages/' ]:
  vendor_dir = os.path.join(bundle_dir, lib_dir)
  sys.path.append(vendor_dir)

import jwt

Obviously this is just an example so you’ll need to change it for your lib_dir and import name.

Cheers,
Pete

Hi @Pete
Thanks for your comment.

I found that I totally missed to prepare python environment explained in the document.

Now, my python plugin works fine :smile:

Please let me ask one more thing.
Can I use python plugin without bundle just as the javascript middleware in the future? Or should I open issue (request) on github repository if I want do so?

Regards,

Hi @taka-t ,

You cannot currently use a python plugin without putting it in a bundle. We recognise this as an issue and have an internal ticket to get it working. I don’t have a date for it yet

Cheers,
Pete

1 Like