Tuesday, April 28, 2015

Continued to search the reason of #150 (public web interface for lino_noi).

Fixed one of the side effects announced yesterday: icons were not properly displayed since their URLs have changed.

Uugh! Leif Azzopardi and David Maxwell write about software patents. After explaining how “Netscape programmer Lou Montulli took the concept of a magic cookie and applied it to web communications.”, they add “Of course, with such a great idea came a software patent - and you can read US patent 5774670 that was submitted by Montulli himself.” No, it is not “of course” at all. The greatest ideas in history of mankind are not patented.

I noticed that my local djangosite_local.py had been setting SESSION_COOKIE_PATH when lino.core.site.Site.site_prefix was something else than the default. Since this trick seems a general need when hosting several Django projects under the same hostname, I added it to lino.core.site.Site.init_before_local().

In a stackoverflow thread titled Django (Python) problem with sessionid, Chris2048 wrote “I had a similar problem, and I fixed it by setting SESSION_COOKIE_NAME to something other than the default ‘sessionid’. I think google analytics might have been clobbering the cookie somehow.”

I don’t use any google analytics (AFAIK), but it seems that modifying the SESSION_COOKIE_NAME from its default sessionid to ssid solved the problem.

Then finally, Pindi Albert’s story in Migrating to cross-domain cookies in Django helped me to understand the reason for the problem on #150 which took me several days:

After changing the content of SESSION_COOKIE_PATH, my browser had two cookies for host 127.0.0.1, both called sessionid, one with path / and the other with path /admin. And it seems that Django writes to the cookie with path /admin, but the browser answers always with the “top-level” cookie, i.e. the old one with path /.

Now another question is how to avoid this problem in the future?

Answer: stop to misuse the site_prefix attribute for specifing that the “Lino admin interface” is not at root.

I released to The Lino framework because everything seemed to work. But there is obviously yet another problem (“SITE.kernel is None”) which occurs only in a multi-threaded environment. So I reverted to a (hopefully) good version:

git rev-list -n1 --before=2015-04-25 master | xargs git checkout

The output of above command is somewhat strange:

Note: checking out '1ca11541fdcb9da85e1331e2de237c38c28860dd'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 1ca1154... http://luc.lino-framework.org/blog/2015/0424.html

TODO:

  • Fix the “SITE.kernel is None” problem

  • Change Apache configurations so that it serves the static files. I hope that I can serve all static files from one place.