Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

xサーバーで500エラーが出ていたためpipのpathを通してflaskをインポートできるようになったのに500エラーがまだ出てしまう

解決したいこと

現在flaskで作成したコードをxサーバーにデプロイしようと作業を続けているのですが、
500エラーになってしまいそこで詰まってしまっています。
先日下記エラーが発生し、原因を調査するとpipのpathが通っておらず、flaskをインポートできないことでエラーが発生している可能性があることが判明してそちらを本日解消したのですが、リロードしても500エラーが出てしまい
エラーログを確認するとまたもや同じようなエラーが発生してしまいました。
(何枠も使ってしまいすみません。)

[Mon May 27 20:23:33.510466 2024] [cgid:error] [pid 2420657:tid 2420703] [client ■■■.■■.■■■.■■■:■■■■■] End of script output before headers: index.cgi
[Tue May 28 22:54:13.735661 2024] [cgid:error] [pid 4072741:tid 4072767] [client ■■■.■■.■■■.■■■:■■■■■] End of script output before headers: index.cgi

https://chikaraemon.com/wordpress/2020/09/26/xserver_flask_mysql_1/
上記記事を参考に作成しており、実際にxサーバーにアップしたファイルが以下になります
スクリーンショット 2024-05-28 232345.png
以下キャプチャが500エラーが表示されている画面になります。
スクリーンショット 2024-05-28 232658.png

下記コードがxサーバーにアップしているコードになります。

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /test1/index.cgi/$1 [QSA,L]
<Files ~ "\.py$">
    deny from all
</Files>
index.cgi
#!/home/■■■■■■■■■■/anaconda3/bin/python3.11

from wsgiref.handlers import CGIHandler
from index import app
CGIHandler().run(app)
index.py
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello world!"

@app.route("/hello")
def hello():
    title="FlaskをレンタルサーバXserverで利用する!"
    subtitle="データベースmySQLのInsert,Update,Selectを実行する"
    return render_template('hello.html', title=title,subtitle=subtitle)

if __name__ == "__main__":
    app.run(host='0.0.0.0')
hello.html
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>{{ title }}</title>
    </head>
    <body>
        <div id="contents">
            <h1 style="font-size: 16px;">{{ title }}</h1>
            <h2 style="font-size: 14px;">{{ subtitle }}</h2>
        </div>
    </body>
</html>

何か原因等ご存じの方がいらっしゃいましたら教えていただけますと幸いです。
何卒よろしくお願いいたします。

0

1Answer

ひとまず/home/■■■■■■■■■■/anaconda3/bin/python3.11や周辺の所有者と権限はどうなっているか確認してください.(特に全ユーザーに実行権限があるかどうか)

0Like

Comments

  1. @Kobayashi0620

    Questioner

    下記のコマンドを実行して所有者とアクセス権を確認するのであっていますでしょうか?

    ‘’’
    ls -l /home/■■■■■■■■■■/anaconda3/bin/python3.11
    ‘’’
    ‘’’
    stat /home/■■■■■■■■■■/anaconda3/bin/python3.11
    ‘’’

    全ユーザーにアクセス権がなかった場合下記を行い付与する
    ‘’’
    chmod a+x /home/■■■■■■■■■■/anaconda3/bin/python3.11
    ‘’’

  2. とりあえずそれで試した結果を貼ってください.
    親ディレクトリがたまに705とかになってて動かないとかあるので同様に検証してみてください.

  3. @Kobayashi0620

    Questioner

    以下の内容が出力されました

    $ ls -l /home/■■■■■■■■■■/anaconda3/bin/python3.11
    
    -rwxr-xr-x 1 ■■■■■■■■■■ members 24608552  5月 27 22:31 /home/■■■■■■■■■■/anaconda3/bin/python3.11
    

    1階層上の/home/■■■■■■■■■■/anaconda3/binは755でした
    image.png

  4. @Kobayashi0620

    Questioner

    お世話になっております。
    進展がありましたので、報告させていただきます。

    下記記事の「cgiの実行言語をperlにしてみる(2020/05/05追加)」という箇所の内容を試してみたところ画面にokと表示されました。
    https://teratail.com/questions/258777

    index.cgi
    #! /usr/local/bin/perl --
    
    print "Content-Type: text/html\n\n";
    print "OK";
    

    こちらができたからと言って特に何かがわかったかといわれるとわかってはいないのですが、こちらの情報が何かお役に立てば幸いです。
    引き続き調査してみます。
    もし何かご存じでしたら教えていただけますと幸いです。。。

    ※下記内容の--がないと500エラーが表示されてしまいます

    #! /usr/local/bin/perl --
    
  5. @Kobayashi0620

    Questioner

    こちらでもokが表示されるようになりました。

    index.cgi
    #! /usr/local/bin/python --
    
    print("Content-Type: text/html\n\n")
    print("OK")
    

    しかし、下記内容だと500エラーが発生してしまいます。

    index.cgi
    #! /home/■■■■■■■■■■/anaconda3/bin/python3.11 --
    
    print("Content-Type: text/html\n\n")
    print("OK")
    

    エラーログを確認しても、以前から出ているエラーと同じ内容のものが出力されます。

    .error
    (省略)End of script output before headers: index.cgi
    
  6. @Kobayashi0620

    Questioner

    こちらの内容が表示されたのはperlの方で表示された後にアップロードして実施していたからでした。
    500エラーが発生した後に下記コードをアップしても画面にOKと表示されることはありませんでした。

    index.cgi
    #! /usr/local/bin/python --
    
    print("Content-Type: text/html\n\n")
    print("OK")
    
  7. @Kobayashi0620

    Questioner

    昨日の夜に参考にしている記事の制作者さんの下記動画を見返していた際に動画の4:02秒あたりで.bash_profileファイルを削除するとうまくいったという記載があったため自分も削除してしまいました。
    https://youtu.be/5o9HJGPlSgk

    その結果以前まではTeraTermにSSH接続したら

    [■■■■■■■■■■@sv15043 ~]$
    

    上記の表示だったのですが、.bash_profileファイルを削除してからは下記の表示になってしまいました。

    -bash-4.2$
    

    下記表示に戻すにはbinフォルダのPATHを通さないと治らなくなってしまいました。

    [■■■■■■■■■■@sv15043 ~]$
    
    -bash-4.2$ export PATH="/home/■■■■■■■■■■/anaconda3/bin:$PATH"
    -bash-4.2$ source ~/.bashrc
    

    こちらは500エラーに何かしら関係してきてしまうものになりますでしょうか?

  8. @Kobayashi0620

    Questioner

    whichコマンドでpythonの階層を探すと下記階層にあると表示されます。
    perlもwhichコマンドで階層が同じでした。

    -bash-4.2$ which python
    /usr/local/bin/python
    

    binフォルダのPATHを通した後にwhichコマンドを実行すると下記の階層にあると表示されます。

    [■■■■■■■■■■@sv15043 ~]$ which python
    ~/anaconda3/bin/python
    

    下記cgiファイルをアップロードして画面が表示されるか確かめてみたのですがこちらも500エラーが発生してしまいました。

    index.cgi
    #! ~/anaconda3/bin/python --
    
    print("Content-Type: text/html\n\n")
    print("OK")
    

Your answer might help someone💌