Hi,

taskd makes a "Request" object and runs it through a turbogears wsgi app.   
This is so that all code can use variables like app_globals (g), tmpl_context 
(c), request, etc whether the code runs in a web request or a task.  This 
starts here:


        r = Request.blank(request_path,
                          base_url=tg.config['base_url'].rstrip(
                              '/') + request_path,
                          environ={'task': self.task,
                                   'nocapture': self.options.nocapture,
                                   })
        list(wsgi_app(r.environ, start_response))

And `wsgi_app` ends up using the `[app:task]` section from your `.ini` file, 
which is probably like this:
```
[app:task]
use = main
; TurboGears will use controllers/task.py as root controller
override_root = task
```

So task.py's `TaskController` is what is supposed to finally run the task.

I haven't tried the proxy-prefix, so I'm not real sure what its implications 
are.  But I would try putting logging in `TaskController.__call__` to see if 
its executing at all.  Probably not.  The log output with the 404 error means 
that its not finding the TaskController.

My guess is the `/my-site` prefix is extra or missing, when running tasks.  So 
some ideas you could try:

- prepend `/my-site` to `base_url` in the `Request.blank` object.  Or remove it 
if its already part of the base_url
- add the filter-with to the `[app:task]` section too.  Or remove it if you 
have it there already
- do some debugging in `def make_app` where it handles the `override_root` 
setting and make sure its finding and loading `TaskController` as the root


---

** [tickets:#8395] Context root URL change **

**Status:** open
**Milestone:** unreleased
**Created:** Mon Aug 23, 2021 05:04 PM UTC by Vrinda A
**Last Updated:** Mon Aug 23, 2021 05:04 PM UTC
**Owner:** nobody


I have a requirement to change the context root URL of Allura. With the hint 
from a TurboGears 
[forum](https://groups.google.com/g/turbogears/c/TzBTef09q8U/m/YpkrlfaInB4J), I 
could change the context root URL by making this change in development.ini 

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /my-site

[app:main]
use = egg:Allura
full_stack = true
filter-with = proxy-prefix

With this change, all the Allura pages go through http://localhost:8080/my-site.

But the issue is that taskd tasks don't work anymore. Allura.log shows up this 
warning:

16:23:25,927 WARNI 
[taskd:forgetracker.tasks.update_bin_counts:61237e1fe992b56fe76a7387:allura.command.taskd]
 Unexpected http response from taskd request: 404 Not Found.  Headers: 
[('Cache-Control', 'no-cache'), ('Pragma', 'no-cache'), ('Content-Type', 
'text/html; charset=utf-8'), ('Content-Length', '4448'), ('Set-cookie', 
'_session_id=b03d71ba8fd1fdb753e1582f86a4260a7d5f5ce613411d1012cd6e51ebd4dae0191bd6adb0f879b7;
 Path=/')]

Any pointers on how to make taskd aware of the context root url change?


---

Sent from forge-allura.apache.org because dev@allura.apache.org is subscribed 
to https://forge-allura.apache.org/p/allura/tickets/

To unsubscribe from further messages, a project admin can change settings at 
https://forge-allura.apache.org/p/allura/admin/tickets/options.  Or, if this is 
a mailing list, you can unsubscribe from the mailing list.

Reply via email to