質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3159閲覧

xserverでindex.cgiが動かない

kyokio

総合スコア560

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/14 09:37

編集2021/05/14 11:09

xserveのデプロイでindex.cgiが動かない

djangoで作ったwebアプリをxserverでアップしたいのですが、index.cgiがうまく動きません。
EC2を使いたいですが、xseverにしろと言われたのでやらなくてはいけません。

共用サーバは初めてでしたが、調べてみるとできないことはないようなのでやってみました。

ファイル構成

下記のようになっています。
public_html内にDjangoのプロジェクトを配置しています。
linuxbrewでpipを入れて必要なものをインストールしています。

. |-- ssl `-- xs341725.xsrv.jp |-- autoreply |-- htpasswd |-- log |-- mail | `-- xs341725.xsrv.jp |-- public_html | |-- Pipfile | |-- Pipfile.lock | |-- default_page.png | |-- index.html | |-- keiba_project | | |-- Pipfile | | |-- Pipfile.lock | | |-- aaa.html  ←確認のためのhtmlファイル | | |-- accounts | | | |-- 省略 | | |-- db.sqlite3 | | |-- index.cgi | | |-- keiba_app | | | |-- 省略 | | |-- keiba_project | | | |-- __init__.py | | | |-- __pycache__ | | | |-- asgi.py | | | |-- settings.py | | | |-- urls.py | | | `-- wsgi.py | | `-- manage.py | |-- pip-9.0.1 | | |-- 省略 | | |-- pip | | | |-- 省略 | | `-- setuptools-3.5.1.tar.gz | |-- pip-9.0.1.tar.gz | `-- pip_list.txt |-- script `-- xserver_php |-- php.ini `-- session

index.cgi

以下がindex.cgiです

#! /home/[サーバID]/.linuxbrew/lib/python3.9 import sys, os os.environ['DJANGO_SETTINGS_MODULE'] = "keiba_project.settings" from wsgiref.handlers import CGIHandler from keiba_project.wsgi import application CGIHandler().run(application)

これで実行すると、500errorが表示されます。
logを見るとEnd of script output before headers: index.cgiと表示されています。

学校でperlでCGIを使用したときに、headerとbodyを区別するために改行を2つ入れろと言われましたが、そのようなことを調べると出てきますが今回はpythonで勝手が違く原因がわかりません。

参考サイトではこれでうまく行っているようです。

試したこと

runserverを動かしてみる

どこかでimportエラーが起きてるのかと思い、runserverをたてましたが、正常に立ち上がりました。

urlを確認してみた

アクセスするurlやindex.cgiの置き場所が違うのかと思い確認してみました。
index.cgiと同じ階層にaaa.htmlというものを作って、http://[serverip]/keiba_project/aaa.htmlでアクセスすると正常にaaa.htmlが表示されました。

ですが、http://[serverip]/keiba_project/aaa.htmlでアクセスすると500エラーが表示されてEnd of script output before headers: index.cgiとlogに出てくるのでやはりcgiの書き方が間違っているのかと思います。

参考サイト

エックスサーバーでDjangoを動かす
XserverでDjangoアプリ公開してみた
エックスサーバでDjango+Pythonを運用!うまくいかない原因はnumpyだった!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もう少し原因の切り分けして範囲を狭めた方が良さそうです。

python

1#!/home/[サーバID]/.linuxbrew/lib/python3.9 2 3print("Content-Type: text/html\n\n") 4print("OK")

これだけのindex.cgiを作って「OK」と表示されるかどうかで、pythonの動作環境側そのものに不具合があるのか、djangoフレームワーク側に不具合があるのかが切り分けられると思います。前者であればパーミッションの設定ミスや改行コードなどの不具合、python3の導入ミス、パスの設定ミス、などが疑われます。後者であればdjangoの導入ミスや設定の不具合が疑われます。こちらの調査内容を必要に応じて質問文に追記してください。

ちなみに↑のコードは1行目のパスの書き方ををちょっと変えてます。

python

1#! /home/[サーバID]/.linuxbrew/lib/python3.9

python

1#!/home/[サーバID]/.linuxbrew/lib/python3.9

にしただけで動く可能性もあります。!の後にスペース空けたらダメだったような気もしたので・・・(間違っていたらごめんなさい)

投稿2021/05/14 11:03

編集2021/05/14 11:20
AbeTakashi

総合スコア4489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyokio

2021/05/14 11:17

回答ありがとうございます。 >これだけのindex.cgiを作って「OK」と表示されるかどうかで、pythonの動作環境側そのものに不具合があるのか、djangoフレームワーク側に不具合があるのかが切り分けられると思います 早速実行してみました。 サーバ内でpython index.cgiと実行すると ``` Content-Type: text/html OK ``` と表示されますが、ブラウザから実行しても500エラーが出ます。 実行権限は755なので問題ないと思います。 ということは、リクエストがきたときにサーバがlinuxbrewのpython以外のpythonを使用しているのでしょうか
AbeTakashi

2021/05/14 11:23

となるとhttpサーバがそのファイルをcgiとして認識してないんですかねぇ 一応念のため再度聞きますが、1行目の#!のあとのスペースは削除しましたよね? あとはindex.cgiのあるディレクトリのパーミッションもチェックした方がいいかもしれません。
AbeTakashi

2021/05/14 11:29

参考) https://career-tech.biz/2020/09/12/python-app-test-xserver/ あとは.htaccessの設定も必要そうですが、こちらはどうでしょう。そのエラーメッセージだとおそらくこの辺が怪しいのですが。httpサーバがpythonスクリプトをプログラムとして認識させる必要があります
kyokio

2021/05/14 13:05

指摘いただいた通り、#!の後のスペースは消しました。 権限も755(-rwxr-xr-x)なので問題ない気がします。 .htaccessはこんな感じです ``` RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /keiba_project/index.cgi/$1 [QSA,L] ```
AbeTakashi

2021/05/14 13:24

なるほど、.htaccessも問題なさそうにみえるのですが・・・ とりあえず質問文に.htaccsssを追記し、修正したindex.cgiを更新してして頂くと良いかと思います。ただ、この切り分けでおそらく原因はdjango側でなく、pythonそのものの動作環境になにかしら問題がありそうなことが分かったので、原因としてはたぶんわりと単純だとおもうのですけどねぇ。力になれずすいません。
kyokio

2021/05/14 13:40 編集

今できました! urlでindex.cgiを実行させるとOKと出ました。 #! /home/[サーバID]/.linuxbrew/lib/python3.9を #! /home/[サーバID]/.linuxbrew/bin/python3.9にしたらできました ``` #! /home/[サーバID]/.linuxbrew/bin/python3.9 import sys, os os.environ['DJANGO_SETTINGS_MODULE'] = "keiba_project.settings" from wsgiref.handlers import CGIHandler from keiba_project.wsgi import application CGIHandler().run(application) ``` にすると真っ白になりますが、少し希望が見えました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問