日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

アーカイブ

2018年06月 のアーカイブ

cygwin
PHP Fatal error: Out of memory (allocated 49807360) (tried to allocate 2140027 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 451

451: $result = zlib_decode($result);

なぜか50MBしか割り当てられていないとエラーが表示されます。

確認するが 512MBきちんと割り当てられている。
php -i | grep memory_limit
memory_limit => 512M => 512M

php -r "\$s = str_repeat(' ', 1000*1000*1000);"
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 1000000024 bytes) in Command line code on line 1

zlib_decode関数が怪しい
ということでzlib_decode関数をいじめてみます。
php -r "\$s = zlib_encode(' ',ZLIB_ENCODING_DEFLATE); str_repeat(\$s, 100*1000*1000);"
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 900000024 bytes) in Command line code on line 1
予想と違う結果で、きちんと設定値が返ってきました。

ということは、
・cygwinのphpにメモリリーク
・phar がメモリを食いつぶしている
・composer がメモリを食いつぶしている
あたりが疑われます

これ以上の追及は時間の無駄(というかわからない)なので
dosプロンプトで実行して解決
curl -O https://getcomposer.org/composer.phar
php composer.phar オプション
>pip3 list --o
pip (9.0.3) - Latest: 10.0.1 [wheel]
setuptools (39.0.1) - Latest: 39.2.0 [wheel]
You are using pip version 9.0.3, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

python3最新版をいれたのにアップグレードが表示されるとは・・・。

>pip3 install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/.../pip-10.0.1-py2.py3-none-any.whl (1.3MB)
Installing collected packages: pip
Found existing installation: pip 9.0.3
Uninstalling pip-9.0.3:
Successfully uninstalled pip-9.0.3
Successfully installed pip-10.0.1

>pip3 list --o
Package Version Latest Type
---------- ------- ------ -----
setuptools 39.0.1 39.2.0 wheel


さくらインターネット ライトプラン で django2.0 + python3.6

執筆:2018.06.15
編集:2018.06.15


設定の仕方
導入方法は関連ページへ

サイト内 関連ページ
  1. さくらインターネット ライトプランに python3をインストール
  2. Django2 CGI handler + apache2.4

応答速度
応答速度
django2.0
+ python3.6
(デフォルトページ)
PHP製のCMS
(運用しているサイト)
ライトプラン

0.48 - 1.41秒

0.50 - 1.46秒
https://
min : 0.48
max : 1.41
avg : 0.85 n[20]
https://
min : 0.50
max : 1.46
avg : 0.85 n[20]
備考 体感で遅く感じる 気にならない

ブラウザだとdjangoは少し遅く感じますが、機械的な取得だとほぼ同じという結果になりました。
djangoのデフォルトページに描画処理があるせいでブラウザだと遅いのかもしれないですね

pythonのほうは、この速度にさらに表示用のなんらかの処理を加えることになるので
phpのほうがcgi応答速度は速いということになります。

djangoは脆弱性がわりとあるようなので、ライトプランというcronが動作しない自動更新できない環境ではちょっと勇気がいる
djangoの導入は見送りになりそう。

キーワード
Django2 CGI handler
Django2 CGI handler さくらインターネット 共有サーバー
Django2 python3 さくらインターネット 共有サーバー
django 脆弱性
AH01215: suexec policy violation: see suexec log for more details

執筆:2018.06.14
編集:2018.06.14


AH01215: suexec policy violation: see suexec log for more details

さくらインターネット

.cgiの1行目のパスを間違っていた
#!/home/ユーザー名/local/bin/実行名

ユーザー名を間違っていて(契約とは違う別のアカウントを指定していたため)
気が付くのに1時間以上かかってしまった。

「パスがありませんでした」くらいのメッセージにしてくださいよ。
Django2 CGI handler + apache2.4 : メモ

執筆:2018.06.13
編集:2018.06.13


概要
python3.6 + django 2.0.6
  1. .htaccess に cgi用のエントリを追記する
  2. start-django.cgi を設置する(名称はなんでもいい)
    wsgi_emulate.py または wsgi_over_cgi.pyをimportする
  3. wsgi_emulate.py または wsgi_over_cgi.py を settings.py と同じフォルダに設置する
以上をすませて、アクセスすると CGIモードで動作する

基本的に wsgi_over_cgi.py 内の
from wsgiref.handlers import CGIHandler
from . import wsgi
app = wsgi.get_wsgi_application()
CGIHandler().run(app)
だけで動かないといけないのですが、django内の処理が間違っているために、環境変数名の変更 及び
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>

apacheが古くて、環境変数が渡らない場合は
start-django.cgi に以下を追加する
os.environ.setdefault("BASE_URI", "/") # / 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://www.djangoproject.com/download/
# https://pypi.python.org/pypi/pytz#downloads
python3をインストール : さくらインターネット ライトプラン

さくらインターネットの
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
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の切り替え機能の要望を出したほうが無難でしょう

» 続きを読む

PHP Laravel 5.6 のインストール

(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




PR

[PR]