Tuesday, December 4, 2018

Re: Issue with Python 3.6 and Django 2.0 App Deployment on Shared Hosting

Hi! Thanks for your email. The best advice I received and I am so glad that I took it was switching to heroku. Heroku makes everything so easy. I still use Bluehost and then I point it at my heroku app. Heroku is the best. I use postgresql with them and only recently had to start paying them. They give you up to 10k rows of database for free. I pay 10 per month now and have 10 million rows and don't pay them for anything else. They solved all of my problems. It is a pain to switch but highly worth it. You still need Bluehost though because heroku is a platform as a service type of company. I had issues with fcgi that heroku resolved, in addition to all sorts of other things I needed for plotting data on the web. Hopefully this helps you. Let me know if you have other questions.

Best wishes,



On Sat, Dec 1, 2018 at 09:48 Annchen Knodt <aknodt@gmail.com> wrote:
Hi Corey,
I'm having what seems to be the exact same problem with django/fcgi on bluehost shared hosting (getting a 404 in the browser but the appropriate html on the command line; I posted my question here), so I'm wondering if/how you ended up resolving it.  Any tips would be greatly appreciated, thanks!!!
Annchen

On Friday, January 5, 2018 at 6:26:08 PM UTC-5, coreyj...@gmail.com wrote:
Thanks a million for your fast response! I greatly appreciate it. I have made those changes you recommended. I swear I looked at that a million times and couldn't see a difference. Thanks for pointing that out.  I also added to my settings file under templates the word 'INFO' rather than 'DEBUG' and I am able to get my debug.log file to simply now say: 

    Not Found: /

These changes are definitely getting me closer. Thank you! I still see the standard 404 page, however, and not the Django 404 page. If I run app.fcgi in my shell I still get all of the Django-specific html but the following errors remain:

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!

I have tried looking at my fcgi_base.py which is where this error is coming from to see what I should modify:

The following code there states:


 for name,default in [('REQUEST_METHOD', 'GET'),
                             ('SERVER_NAME', 'localhost'),
                             #('SERVER_NAME', '50.87.249.197'),
                             #('SERVER_PORT', '33606'),
                             ('SERVER_PORT', '80'),
                             ('SERVER_PROTOCOL', 'HTTP/1.0')]:
 if name not in environ:
                             environ['wsgi.errors'].write(bytearray('%s: missing FastCGI param %s '
                                                       'required by WSGI!\n' %
                                                        (self.__class__.__name__, name), 'utf'))
                             environ[name] = default


That IP I believe is what bluehost recommended me to use but they can't assign me a port because I am on a shared server. When I type in:

netstat --listen

I can see the open ports and 33606 should be open...

I have tried commenting on the code lines above and trying my specific IP and and my port that I believe is open, but the result is the same.

Do you by chance see anything else I can try. If you would like I would be more than happy to send you any information you request that you think may be helpful in resolving this. Again, Thank you for your time and help! I greatly appreciate it!

Best wishes!

Corey






















On Friday, January 5, 2018 at 4:59:24 PM UTC-6, Matthew Pava wrote:

Looking at the .htaccess file and the example provided here:  https://docs.djangoproject.com/en/1.8/howto/deployment/fastcgi/#running-django-on-a-shared-hosting-provider-with-apache

It looks like you have a typo.

AddHandler fastcgi-script .fcgi

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]

 

In the RewriteRule line, you have a % instead of a $.

 

Also, your DJANGO_SETTINGS_MODULE doesn't have your project name specified.

 

Granted, these examples are from Django 1.8.

 

From: django...@googlegroups.com [mailto:django...@googlegroups.com] On Behalf Of coreyj...@gmail.com
Sent: Friday, January 5, 2018 3:01 PM
To: Django users
Subject: Re: Issue with Python 3.6 and Django 2.0 App Deployment on Shared Hosting

 

Hi! I am having the same problem. Did you get this to work yet? Any tips would be greatly appreciated:

 

I am using a shared server, linux, Django 2.0, Python 3.6.4, flup6. Because fastcgi is deprecated post Django 1.8 and Bluehost doesn't use WSGI and only FastCGI (mod_fastcgi) I am using what NetAngels made available: https://github.com/NetAngels/django-fastcgi

My .htaccess file is the project folder with my .fcgi file as is commonly recommended. My .htaccess reads:

AddHandler fastcgi-script.fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)% app.fcgi/$1 [QSA, L]

My .fcgi file reads:

#!/homeX/user/python3.6/bin/python36
import sys, os
project_name = "app"
sys.path.insert(0, "homeX/user/python3.6/bin/python36")
sys.path.append("directory/of/my/project/app")
sys.path.append("directory/of/my/project/app/app")
sys.path.append("directory/of/my/project/app/app/app")
sys.path.append("directory/of/site-packages")
sys.path.append("directory/of/site-packages/flup")    
sys.path.append("directory/of/site-packages/django")  
os.chdir("directory/of/my/project/app/app/app")
 
os.environ['DJANGO_SETTINGS_MODULE'] = "settings"
from django_fastcgi.servers.fastcgi import runfastcgi
from django.core.servers.basehttp import get_internal_wsgi_application
wsgi_application = get_internal_wsgi_application()
 
runfastcgi(wsgi_application, method="prefork", daemonize="false", 
minspare=1, maxspare=1), maxchildren=1)

I have made sure to:

chmod 0755 app.fcgi

I am able to type into the linux SSH:

app.fcgi

This is what comes up in the SSH terminal:

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Not Found: /
Status: 404 Not Found
Content-Type: text/html
X-Frame-Options: SAMEORIGIN
Content-Length: 2021
 
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Page not found at /</title>
<meta name="robots" content="NONE,NOARCHIVE">
<style type="text/css">
html * { padding:0; margin:0; }
body * { padding:10px 20px; }
body * * { padding:0; }
body { font:small sans-serif; background:#eee; color:#000; }
body>div { border-bottom:1px solid #ddd; }
h1 { font-weight:normal; margin-bottom:.4em; }
h1 span { font-size:60%; color:#666; font-weight:normal; }
table { border:none; border-collapse: collapse; width:100%; }
td, th { vertical-align:top; padding:2px 3px; }
th { width:12em; text-align:right; color:#666; padding-right:.5em; }
#info { background:#f6f6f6; }
#info ol { margin: 0.5em 4em; }
#info ol li { font-family: monospace; }
#summary { background: #ffc; }
#explanation { background:#eee; border-bottom: 0px none; }
</style>
</head>
<body>
<div id="summary">
<h1>Page not found <span>(404)</span></h1>
<table class="meta">
<tr>
<th>Request Method:</th>
<td>GET</td>
</tr>
<tr>
<th>Request URL:</th>
<td>http://localhost/</td>
</tr>
 
</table>
</div>
<div id="info">
 
<p>
Using the URLconf defined in <code>app.urls</code>,
Django tried these URL patterns, in this order:
</p>
<ol>
 
<li>
 
admin/
 
</li>
<li>
 
million/
 
 
</li>
</ol>
<p>
 
The empty path didn't match any of these.
</p>
 
</div>
 
<div id="explanation">
<p>
You're seeing this error because you have <code>DEBUG = True</code> in
your Django settings file. Change that to <code>False</code>, and Django
will display a standard 404 page.
</p>
</div>
</body>
</html>

However, when I go to my website.com/app it shows me the standard 404 error generated by my host. If I go to my website.com/app/app.fcgi it shows me the contents of the file and not the HTML generated when I run app.fcgi. In the main settings.py file,

DEBUG = True
ALLOWED_HOSTS = ['*']

But it will not show me the error generated by Django. I have tried putting in host information, socket information, etc. and it always give me a 500 error when I go to my website.com/app.

I have messed around trying to connect FastCGIExternalServer to my .fcgi file but I can never get the HTML as when I simply just use the default settings that I get from NetAngels referenced above, despite the WSGI warnings. It seems that because it is outputting my HTML, that everything is fine (i.e., it will still display my HTML) because if I try to correct for the WSGI warnings/errors, I don't ever see any of the HTML that Django is generating which is below the WSGI errors.

I was able to get a debug.log working and this is what it says:

Exception while resolving variable 'name' in template 'unknown'.
Traceback (
--
Corey J. Bishop, Ph.D.
Assistant Professor of Biomedical Engineering
Principal Investigator of the Pharmacoengineering Laboratory:
Dwight Look College of Engineering
Texas A&M University
Emerging Technologies Building Room 5016
College Station, TX 77843

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAC-nf1aDc0HK%2BbwTQDnjMwKFV9OPuhX0abiGwOjXu_3uqYp8tg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment