Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

django - Disable Apache caching of python files

I'm working with django and doing facebook integration for which is needed a test server. I've had lots of problems with Apache and its caching of .pyc files, I even asked here on stackoverflow.

That solution works but I want to know if there is an option for disabling Apache caching of such files. Server restart might be a problem for me.

EDIT:

Here is the django.wsgi code:

path = '/not/actual/path'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'notactualproj.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

How to solve your "Bytecode problem"

You should probably figure out why those unwanted .pyc files are there in the first place (are these in your repository? They should be ignored).

As mentionned in the comments, if you have dangling .pyc files that cause issues, you could incorporate removing all the .pyc files as part of your pull process when you deploy newer code to the server. Running the app will re-create the ones that are needed when the modules are imported.


Now, if you really don't want to have bytecode generated, you could use the PYTHONDONTWRITEBYTECODE environment variable, but I wouldn't recommend that as it seems a pretty excessive solution.

How to solve Apache seemingly pulling older versions of the code.

Now, you have to make the difference between two problems at play here.

  • Older Bytecode files generated by python (e.g. .pyc files), which can cause an issue in specific cases like replacing a file with a module, but are not often a cause for concern.
  • Mod WSGI not reloading newer code that gets uploaded. This depends on which mode you're running Mod WSGi in, and an usual symptom is that hitting a page seems to randomly pull the newer or older version of the code.

To solve the first issue, you just have to remove unused bytecode files. But, again, this probably isn't what's causing your issue.

To solve the second issue, you have two solutions

  • Restarting apache when you upload newer code. Using apache2ctl -k graceful, this will be transparent to your users, and I can't see why "Server restart might be a problem", unless you're on shared hosting.
  • Using code reloading, you might want to have a look at the mod_wsgi documentation.

I don't think bytecode is your issue, and code reloading probably is.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...