Django2 CGI handler + apache2.4 : メモ
概要
python3.6 + django 2.0.6
基本的に wsgi_over_cgi.py 内の
PATH_INFO、FORCE_SCRIPT_NAMEの変更設定がwsgi_emulate.py または wsgi_over_cgi.py および setting.py内に追加されています。
IfModuleで条件指定しているため
wsgiモジュールが有効になった場合は自動的にwsgiで動作する
必要な設定
.htaccess
apacheが古くて、環境変数が渡らない場合は
start-django.cgi に以下を追加する
表示されない場合
# https://pypi.python.org/pypi/pytz#downloads
執筆:2018.06.13
編集:2018.06.13
編集:2018.06.13
概要
python3.6 + django 2.0.6
- .htaccess に cgi用のエントリを追記する
- start-django.cgi を設置する(名称はなんでもいい)
wsgi_emulate.py または wsgi_over_cgi.pyをimportする - wsgi_emulate.py または wsgi_over_cgi.py を settings.py と同じフォルダに設置する
基本的に wsgi_over_cgi.py 内の
from wsgiref.handlers import CGIHandler
from . import wsgi
app = wsgi.get_wsgi_application()
CGIHandler().run(app)
だけで動かないといけないのですが、django内の処理が間違っているために、環境変数名の変更 及びfrom . import wsgi
app = wsgi.get_wsgi_application()
CGIHandler().run(app)
PATH_INFO、FORCE_SCRIPT_NAMEの変更設定がwsgi_emulate.py または wsgi_over_cgi.py および setting.py内に追加されています。
IfModuleで条件指定しているため
wsgiモジュールが有効になった場合は自動的にwsgiで動作する
必要な設定
.htaccess
# 追加分
<IfModule !mod_wsgi.c>
<FilesMatch "\.(?i:pyc?)$">
order deny,allow
deny from all
# RewriteRule "" - [L,R=404]
</FilesMatch>
# wsgi_emulate.py 内で この値をもとに正しいURLを生成できるように成形される
setenv BASE_URI / # / or /pathtositetop
setenv SCRIPT_URL / # / or /pathtositetop/
RewriteRule "^$" start-django.cgi [L,T=application/x-httpd-cgi]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "." start-django.cgi [L,T=application/x-httpd-cgi]
</IfModule>
<IfModule !mod_wsgi.c>
<FilesMatch "\.(?i:pyc?)$">
order deny,allow
deny from all
# RewriteRule "" - [L,R=404]
</FilesMatch>
# wsgi_emulate.py 内で この値をもとに正しいURLを生成できるように成形される
setenv BASE_URI / # / or /pathtositetop
setenv SCRIPT_URL / # / or /pathtositetop/
RewriteRule "^$" start-django.cgi [L,T=application/x-httpd-cgi]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "." start-django.cgi [L,T=application/x-httpd-cgi]
</IfModule>
apacheが古くて、環境変数が渡らない場合は
start-django.cgi に以下を追加する
os.environ.setdefault("BASE_URI", "/") # / or /pathtositetop
os.environ.setdefault("SCRIPT_URL", "/") # / or /pathtositetop/
こちらに書き込んでいたほうが確実だろうos.environ.setdefault("SCRIPT_URL", "/") # / or /pathtositetop/
表示されない場合
- start-django.cgi ファイルの実行権限がついているか確認する
- djangoへのパスが通っているか?
- インストールする場合
pip3 install Django - 指定フォルダから読み込む場合
スクリプト内で
sys.path.append("パス")
- インストールする場合
- pytzの確認
pip3 install pytz - No module named '_sqlite3'
sudo pkg install databases/py35-sqlite3
# https://pypi.python.org/pypi/pytz#downloads
カテゴリー: レンタルサーバーやcgi
2018.06.13
python3をインストール : さくらインターネット ライトプラン
さくらインターネットの
Ruby と Python は古すぎて使い物にならない
ローカルのcygwinでバージョンを見ると
virtualboxにいれているテスト用のfreebsd9でも Python 2.7.13 が返ってくる(pkg upgradeとうったが最新だよっていわれ、もう更新できない。)
FreeBSD9は tlsv1 なので
最新のものに更新していない古いバイナリを実行すると
さくらインターネットで使われている python 2.7.6はいつごろか追うと 2014Q3 ということがわかった。 2014Q4からは、2.7.8になっているので
4年以上も放置されているということになる
ということで、pythonを使いたい人はさくらインターネットの共有サーバーはやめておいたほうがいいでしょう。
OSのアップグレード待つか、新規契約して新しいサーバーに移るしかないですね。
注意点(リスク)
さくらインターネットは FreeBSD9(FreeBSD 9.1) で
FreeBSD9のFreeBSD公式サポートはかなり前に終了していて(9.1:2014 年 12 月 31 日, 9シリーズ:最終 2016 年 12 月 31 日)
osのライブラリも古いので 自前buildは あまりお勧めしない。
現在のFreeBSDのカレントブランチは 11 で 来年には12がリリースされる
perlの切り替えができるので、pythonでも切り替えは技術的には可能なはずなので
サポートに pythonの切り替え機能の要望を出したほうが無難でしょう
さくらインターネットの
Ruby と Python は古すぎて使い物にならない
Ruby /usr/local/bin/ruby 1.8.7
Python /usr/local/bin/python 2.7.6
2018/06
ローカルのcygwinでバージョンを見ると
ruby 2.3.6
Python2 2.7.14
Python2 2.7.14
Python3 3.6.4
virtualboxにいれているテスト用のfreebsd9でも Python 2.7.13 が返ってくる(pkg upgradeとうったが最新だよっていわれ、もう更新できない。)
FreeBSD9は tlsv1 なので
最新のものに更新していない古いバイナリを実行すると
'SSLError(SSLError(1, '[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:833)'),)'
などのエラーが発生するさくらインターネットで使われている python 2.7.6はいつごろか追うと 2014Q3 ということがわかった。 2014Q4からは、2.7.8になっているので
4年以上も放置されているということになる
ということで、pythonを使いたい人はさくらインターネットの共有サーバーはやめておいたほうがいいでしょう。
OSのアップグレード待つか、新規契約して新しいサーバーに移るしかないですね。
注意点(リスク)
せっかくインストールしてもサーバーOSがアップグレードされると
.soファイルのリンク切れで
自前Buildアプリはすべてダウンしてしまうので気を付けましょう
さくらインターネットは FreeBSD9(FreeBSD 9.1) で
FreeBSD9のFreeBSD公式サポートはかなり前に終了していて(9.1:2014 年 12 月 31 日, 9シリーズ:最終 2016 年 12 月 31 日)
osのライブラリも古いので 自前buildは あまりお勧めしない。
現在のFreeBSDのカレントブランチは 11 で 来年には12がリリースされる
perlの切り替えができるので、pythonでも切り替えは技術的には可能なはずなので
サポートに pythonの切り替え機能の要望を出したほうが無難でしょう
» 続きを読む
カテゴリー: レンタルサーバーやcgi
2018.06.12
PHP Laravel 5.6 のインストール
(1) サーバー要件
(2) インストール準備
composerが必要なのでない場合は、ダウンロードする
(3) インストール
最新版
php composer.phar create-project laravel/laravel --prefer-dist インストール先
バージョンを指定する場合
php composer.phar create-project laravel/laravel --prefer-dist インストール先 5.6
(例)
php composer.phar create-project laravel/laravel --prefer-dist laravel
(4) 更新
インストール先に移動後
php composer.phar update
を実行すると最新版に更新される
アクセス
インストール先/public にアクセスるとデフォルトのサイトが表示される。
この内容は、resources/views/welcome.blade.php
が表示されている
公開先の変更
インストール先/public が公開URLとなっているので、
公開フォルダを変更するにはこの内容をコピーして、index.php内のrequireされているパスをインストール先に向くように書き換えれば好きな位置に移動できる。
ページ(URI)の追加
ページは routes/web.php で一括管理されている。
Route::get('/demo/{name?}', function ($name=null) { return 'Hello'; });
を追加すると /demoにあくせすると Hello と表示されるようになる
404エラーにする場合は、return App::abort(404); を返すといいだろう
ページ移動は、Route::redirect('/移動元', URL::to('/移動先'), 301);
を利用する
詳しい設定はデフォルトのページからいけるDoccumentを参考にしよう。
テンプレート(blade)
デバッグ時にバージョンを表示するサンプル
@if (config('app.debug'))
Laravel {{ app()->version() }}
@else
@endif
(1) サーバー要件
PHP7.1の最新版以降
必要なPHP拡張
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension
XML PHP Extension
Ctype PHP Extension
JSON PHP Extension
この内容は、公式サイトで最新版を確認しよう(2) インストール準備
composerが必要なのでない場合は、ダウンロードする
curl -o https://getcomposer.org/composer.phar
(3) インストール
最新版
php composer.phar create-project laravel/laravel --prefer-dist インストール先
バージョンを指定する場合
php composer.phar create-project laravel/laravel --prefer-dist インストール先 5.6
(例)
php composer.phar create-project laravel/laravel --prefer-dist laravel
(4) 更新
インストール先に移動後
php composer.phar update
を実行すると最新版に更新される
アクセス
インストール先/public にアクセスるとデフォルトのサイトが表示される。
この内容は、resources/views/welcome.blade.php
が表示されている
公開先の変更
インストール先/public が公開URLとなっているので、
公開フォルダを変更するにはこの内容をコピーして、index.php内のrequireされているパスをインストール先に向くように書き換えれば好きな位置に移動できる。
ページ(URI)の追加
ページは routes/web.php で一括管理されている。
Route::get('/demo/{name?}', function ($name=null) { return 'Hello'; });
を追加すると /demoにあくせすると Hello と表示されるようになる
404エラーにする場合は、return App::abort(404); を返すといいだろう
ページ移動は、Route::redirect('/移動元', URL::to('/移動先'), 301);
を利用する
詳しい設定はデフォルトのページからいけるDoccumentを参考にしよう。
テンプレート(blade)
デバッグ時にバージョンを表示するサンプル
@if (config('app.debug'))
Laravel {{ app()->version() }}
@else
@endif
カテゴリー: レンタルサーバーやcgi
2018.06.07
perl エラー 出力を ブラウザに表示する
1行を追加すると
エラーがログではなく、ブラウザに出力される
On/Offの詳しい制御方法は不明。
use CGI::Carp qw(fatalsToBrowser);
1行を追加すると
エラーがログではなく、ブラウザに出力される
On/Offの詳しい制御方法は不明。
カテゴリー: レンタルサーバーやcgi
2017.03.08
さくらのレンタルサーバ 共有サーバ 2017/02
FreeBSD 9はというと 12月31日をもってOSサポートを終了している。
会社としては人的リソースとコストを考えるとOSのアップデートなんかしたくないだろう。
そこで、わざわざ、10,11からパッチを作って、9に当てるような非効率なことをするだろうか?となります。
簡単な不具合ならパッチで済ますだろう。
FreeBSD 10,11が主なブランチで、10は、.3なので もうすぐ終わるのでこれにはならないでしょう。
素人的に普通に考えると候補は 11.0, 11.1 または、来年リリースされる12ということになります
サーバーOSアップデートが来る可能性があります。
おそくても2018年の春までには来そうな気がします。
コンテンツのダウンがないかサイトのチェックが必要になるので
個人的には、アップデートはやめてほしいですね。
OSバージョン FreeBSD 9.1-RELEASE-p24 amd64
パッチを当てている仕様のようだ。FreeBSD 9はというと 12月31日をもってOSサポートを終了している。
会社としては人的リソースとコストを考えるとOSのアップデートなんかしたくないだろう。
そこで、わざわざ、10,11からパッチを作って、9に当てるような非効率なことをするだろうか?となります。
簡単な不具合ならパッチで済ますだろう。
FreeBSD 10,11が主なブランチで、10は、.3なので もうすぐ終わるのでこれにはならないでしょう。
素人的に普通に考えると候補は 11.0, 11.1 または、来年リリースされる12ということになります
ブランチ | リリース | 分類 | リリース日 | 保守終了予定日 |
releng/9.1 | 9.1-RELEASE | Extended | 2012 年 12 月 30 日 | 2014 年 12 月 31 日 |
releng/9.3 | 9.3-RELEASE | Extended | 2014 年 7 月 16 日 | 2016 年 12 月 31 日 |
releng/10.3 | 10.3-RELEASE | Extended | 2016 年 4 月 4 日 | 2018 年 4 月 30 日 |
releng/11.0 | 11.0-RELEASE | n/a | 2016 年 10 月 10 日 |
サーバーOSアップデートが来る可能性があります。
おそくても2018年の春までには来そうな気がします。
コンテンツのダウンがないかサイトのチェックが必要になるので
個人的には、アップデートはやめてほしいですね。
カテゴリー: レンタルサーバーやcgi
2017.02.18