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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

1604閲覧

mampでpythonをcgiとして実行したいが500インターネットサーバーエラー

SoraSue

総合スコア30

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2017/09/03 02:41

###前提・実現したいこと
現在chrome拡張機能を作成しており、jsとpythonをajaxなどで連携させたいと考えています。そこで、pythonをmampでcgiとして実行したいのですが、500Internal Server Error
と表示されます。
環境は以下の通りです。

  • macOS Sierra
  • Python 3.6.1 :: Anaconda 4.4.0 (x86_64)
  • MAMP バージョン4.2

###発生している問題・エラーメッセージ
例えば、http://localhost/background/cgi-bin/py.cgiにアクセスすると、(ディレクトリは正しいとします)

Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log.

と表示されます。
また、mampのエラーログは次のように言っています。

Premature end of script headers

###該当のソースコード
実行したいpythonファイルは以下の通りです。
シバン行はanaconda3の中のものを指定しています。

python

1#!/usr/bin/env /Users/suegamisora/.pyenv/versions/anaconda3-4.4.0/lib/python3.6 2 3print("Content-Type: text/plain") 4print() 5 6import sys 7print(sys.version)

また、mampのapache2のhttpd.confは以下の通りです。(文字数制限のため、コメントアウトは除きます。)

<IfModule !mpm_netware.c> PidFile logs/httpd.pid </IfModule> Listen 80 LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_dbd_module modules/mod_authn_dbd.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_default_module modules/mod_authz_default.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule file_cache_module modules/mod_file_cache.so LoadModule cache_module modules/mod_cache.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so LoadModule dbd_module modules/mod_dbd.so LoadModule bucketeer_module modules/mod_bucketeer.so LoadModule dumpio_module modules/mod_dumpio.so LoadModule echo_module modules/mod_echo.so LoadModule case_filter_module modules/mod_case_filter.so LoadModule case_filter_in_module modules/mod_case_filter_in.so LoadModule reqtimeout_module modules/mod_reqtimeout.so LoadModule ext_filter_module modules/mod_ext_filter.so LoadModule include_module modules/mod_include.so LoadModule filter_module modules/mod_filter.so LoadModule substitute_module modules/mod_substitute.so LoadModule charset_lite_module modules/mod_charset_lite.so LoadModule deflate_module modules/mod_deflate.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule cern_meta_module modules/mod_cern_meta.so LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so LoadModule ident_module modules/mod_ident.so LoadModule usertrack_module modules/mod_usertrack.so #LoadModule unique_id_module modules/mod_unique_id.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule version_module modules/mod_version.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_scgi_module modules/mod_proxy_scgi.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule ssl_module modules/mod_ssl.so LoadModule mime_module modules/mod_mime.so LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule asis_module modules/mod_asis.so LoadModule info_module modules/mod_info.so LoadModule cgi_module modules/mod_cgi.so LoadModule fastcgi_module modules/mod_fastcgi.so LoadModule cgid_module modules/mod_cgid.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule imagemap_module modules/mod_imagemap.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule perl_module modules/mod_perl.so LoadModule wsgi_module modules/mod_wsgi.so LoadModule xsendfile_module modules/mod_xsendfile.so LoadModule php7_module /Applications/MAMP/bin/php/php7.1.6/modules/libphp7.so AddType application/x-httpd-php .php .phtml <IfModule !mpm_netware_module> <IfModule !mpm_winnt_module> User (ここには僕のユーザー名が入力されてます。) Group #-1 </IfModule> </IfModule> <IfModule xsendfile_module> XSendFile on </IfModule> ServerAdmin you@example.com ServerName localhost:80 DocumentRoot "/Users/(僕のユーザー名)/Desktop/Computers/broaden_your_horizons" <Directory /> Options Indexes FollowSymLinks AllowOverride None </Directory> <Directory "/Users/(僕のユーザー名)/Desktop/Computers/broaden_your_horizons"> MultiViews Options All files. AllowOverride All Order allow,deny Allow from all XSendFilePath "/Applications/MAMP/htdocs" </Directory> <IfModule dir_module> DirectoryIndex index.html index.php <IfModule perl_module> DirectoryIndex index.pl </IfModule> <IfModule wsgi_module> DirectoryIndex index.wsgi index.py </IfModule> </IfModule> AccessFileName .htaccess <FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch> <Files ~ "^\.DS_Store"> Order allow,deny Deny from all </Files> ErrorLog "/Applications/MAMP/logs/apache_error.log" LogLevel error <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> </IfModule> <IfModule alias_module> If you Alias /favicon.ico "/Applications/MAMP/bin/favicon.ico" Alias /icons/ "/Applications/MAMP/Library/icons/" <Directory "/Applications/MAMP/Library/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Alias /phpMyAdmin "/Applications/MAMP/bin/phpMyAdmin" Alias /phpmyadmin "/Applications/MAMP/bin/phpMyAdmin" <Directory "/Applications/MAMP/bin/phpMyAdmin"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Alias /phpPgAdmin "/Applications/MAMP/bin/phpPgAdmin" Alias /phppgadmin "/Applications/MAMP/bin/phpPgAdmin" <Directory "/Applications/MAMP/bin/phpPgAdmin"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Alias /phpLiteAdmin "/Applications/MAMP/bin/phpLiteAdmin" Alias /phpliteadmin "/Applications/MAMP/bin/phpLiteAdmin" <Directory "/Applications/MAMP/bin/phpLiteAdmin"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Alias /MAMP "/Applications/MAMP/bin/mamp" <Directory "/Applications/MAMP/bin/mamp"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Alias /adminer "/Applications/MAMP/bin/adminer" <Directory "/Applications/MAMP/bin/adminer"> DirectoryIndex adminer.php Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "/Applications/MAMP/cgi-bin/" Alias /perl/ "/Applications/MAMP/cgi-bin/" <IfModule perl_module> PerlModule ModPerl::Registry <Location /perl> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI </Location> </IfModule> </IfModule> <IfModule cgid_module> </IfModule> ScriptAliased <Directory "/Applications/MAMP/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> DefaultType text/plain <IfModule mime_module> TypesConfig /Applications/MAMP/conf/apache/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz server AddHandler cgi-script .cgi .pyd </IfModule> <IfModule mime_magic_module> MIMEMagicFile /Applications/MAMP/conf/apache/magic </IfModule> directory can be <IfModule ssl_module> SSLRandomSeed startup file:/dev/urandom 1024 SSLRandomSeed connect file:/dev/urandom 1024 learn more google for "POODLE SSLv3". </IfModule>

###試したこと
teratailに似たような質問があったので、以下のサイトを参考に、シバン行を変えてみたり、文字コードを変えてみたりしましたが、エラーは消えませんでした。
CGI形式でpythonを実行する際、pyenvで指定したバージョンのpythonが実行されるようにしたいです

PythonでcgiのHello World

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

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

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

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

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

CHERRY

2017/09/03 08:25 編集

Webブラウザに表示されたエラーメッセージではなく、MAMP のログに 1行だけでなく、もうすこし詳細なエラーメッセージが残っていないでしょうか? 
fiwa

2017/09/03 08:34

普通にhtdocsに入れてもダメなのですか?
SoraSue

2017/09/03 08:40

[Sun Sep 03 17:23:41 2017] [error] [client ::1] env: /Users/(僕のユーザー名)/.pyenv/versions/anaconda3-4.4.0/lib/python3.6: Permission denied [Sun Sep 03 17:23:41 2017] [error] [client ::1] Premature end of script headers: py.cgiというエラーログが出ました。
SoraSue

2017/09/03 12:37

みなさんの協力のおかげで、無事pythonのcgiを実行させられました!以下の3点を修正して直りました。①chmod +xでファイルに実行権限を与える。②シバン行では、anacondaのpythonではなく、/usr/local/bin/python3.6を指定する。③httpd.confのScriptAriasでcgiファイルを実行したいフォルダを指定する。
guest

回答2

0

cgiファイルに実行権限はついていますか?
chmod +x /Applications/MAMP/cgi-bin/py.cgi
などで試しに実行権限をつけてみてはいかがでしょう

投稿2017/09/03 07:05

calkinos

総合スコア452

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

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

SoraSue

2017/09/03 07:12

回答ありがとうございます! chmod 755 (py.cgiファイルのディレクトリ)を実行してみましたが、相変わらず500エラーが出ました。
Higemura

2017/09/03 07:27

横から失礼します! パーミッション変更ではなくCGIの実行する権限のことだと思います! chmod +x /Applications/MAMP/cgi-bin/py.cgi
SoraSue

2017/09/03 07:37

助言ありがとうございます! 調べてみたところ、「chmod +x」は実行権限を変更できるのですね。 /Applications/MAMP/cgi-bin/py.cgの部分はpy.cgiが入っている他のディレクトリでもいいのでしょうか?(Desktop/py.cgi など) それとも、/Applications/MAMP/cgi-binの中のpy.cgiでないといけないのですか?
Higemura

2017/09/03 07:51 編集

いえ、このディレクトリは例なので実際にpy.cgiが配置してあるディレクトリで大丈夫です! ですがcgi-bin配下にpy.cgiを入れた方が良いです。 MAMPのローカルホストの起動がDesktop配下でしたら「Desktop/cgi-bin/py.cgi」で大丈夫です。
SoraSue

2017/09/03 07:56

chmod +x (py.cgiのディレクトリ)を試しましたがダメでした。 また、httpd.confのScriptAlias /cgi-bin/ "/Applications/MAMP/cgi-bin/"をpy.cgiの入っているディレクトリに変更しましたが、ダメでした。
SoraSue

2017/09/03 08:00

以前、/Applications/MAMP/cgi-bin内にpy.cgiを入れると、localhostのどのページでも403エラー(権限がない)が出て、権限変更しても治りませんでした。(結局MAMPを再インストールしました。)そのため、できれば/Applications/MAMP/cgi-bin以外でpythonを実行したいです。
Higemura

2017/09/03 08:14

なるほど、MAMPのapacheの設定にpythonの拡張子を追記したらどうですか? /Applications/MAMP/conf/apache/httpd.conf #AddHandler cgi-script .cgiを AddHandler cgi-script .cgi .pyに変更してみてください。 apache/httpd.confが編集できなければパーミッションの変更が必要かもしれません
SoraSue

2017/09/03 08:20

それもすでにやってみたのですが、500エラーは治りませんでした。
calkinos

2017/09/03 08:28 編集

chmod +x するのはディレクトリではなくてファイルですよ? webアクセスではなく ターミナルから py.cgiファイルが実行できますか? python py.cgi ではなく /path/to/directory/py.cgi で
SoraSue

2017/09/03 08:27

$ chmod +x /Users/(僕のユーザー名)/Desktop/(py.cgiが入っているディレクトリ)/cgi-bin/py.cgiと何回かしてみましたが、500エラーのままでした。
SoraSue

2017/09/03 08:48

/path/to/directory/py.cgiとすると、anacondaの中のpythonに対するPermissionがないと言われました。
calkinos

2017/09/03 08:58

では anacondaの中のpythonにも chmod +x で実行権限をつけてみましょう。
SoraSue

2017/09/03 12:32

anacondaはなぜか実行権限をつけられなかったのですが、pythonの指定を#!/usr/local/bin/python3.6にしたら動きました! ありがとうございます!
guest

0

ベストアンサー

Anacondaがどういう挙動をするものかよく知らないのですが、私の環境ではMAMPの設定はデフォルトのままで、py.cgiのパーミッションを755にしておけばそのままhtdocsに放り込めば読まれています。

Sierra 10.12.6, MAMP 4.2(845), python3.6.2 [via homebrew]

Finder
Safari

投稿2017/09/03 08:53

編集2017/09/04 08:37
fiwa

総合スコア1192

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

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

SoraSue

2017/09/03 08:59

htdocs内で実行したらうまく動きました! ありがとうございます! なぜhtdocs内じゃないと500エラーになるのでしょうか?
fiwa

2017/09/03 09:53

普通なら/Applications/MAMP/cgi-binフォルダにpy.cgiを入れた場合でも(Apacheのポートを80に変更しているとして)、http://localhost/cgi-bin/py.cgi で表示されるはずですが、そこには入れたくないということなので。それ以外のディレクトリに置いたCGIを実行したいならhttpd.confでScriptAriasのところをきちんと書いてやる必要があるかと思います。
SoraSue

2017/09/03 12:33

pythonの指定を#!/usr/local/bin/python3.6にし、ScriptAriasを書き換えたところ、ちゃんと実行されました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問