この記事を三行にまとめると
2系から3系への移り変わりを見て行きましょーさすがはスリーセブン。フィーバーしまくってんな
ここらで一枚トーストが恐い
シェルはCakePHPのバージョンがメジャーアップするたびに変わってきた感があります。1.3から2系に変わったときも、ちょこっと変わりました。
ちなみにそんときの記事がこれ。
Shellが動かねえぞ(Cake2系にバージョンアップしたら)
ってことで、今日は2系から3系への移り変わりを見て行きましょー。
こうですね。ここでは「/var/www/cakephp」の下に、appやらCakeフォルダがあるという仮定。
appフォルダの中にConsoleってフォルダがあって、その中にさらにCommandってフォルダがあって、その下にshellファイルを作成します。そんであとは自分で作ったメソッドを実行すると。
中身については、2系の頃とそんなには変わってないですかね。
ただ、シェルを実行するときのコマンドの打ち方は、ちょっと変わりました。
2系の頃より、随分とシンプルになった気がしますね。
srcフォルダと同じ階層にbinというフォルダがあり、その中にcakeという実行ファイルらしきものが入っています。実行権限がない場合は、パーミッションを与えてあげてください。エサは与えなくて良いです。
シェル名の部分は、僕が試してみた限りは、大文字でも小文字でも動きます。
どっちでも良いっぽい。
ちなみに、メソッド名を「main」にした場合は、記述を省略することができるようです。
これで正常に動きます。もしかしたら2系のときもそうだったのかな? そういえば試してなかったや。
tmpフォルダの中にあるキャッシュファイルの所有者が、rootになってしまうことがあるかもしれない。もしそうなると、パーミッション次第ではapacheがファイルを書き込んだりできなくなってしまうので、画面を表示したときにエラーが出てしまう。
failed to open stream: Permission denied in 〜
何かこんなエラーが出る。
いくつかやり方は考えられると思いますが、たぶん一番手っ取り早いのは、キャッシュファイルのパーミッションが666とか777になるように設定してしまうことだと思います。
configフォルダの中にあるapp.phpにキャッシュファイルの設定項目があるんですが、そこでパーミッションの設定ができます。
「mask」っていう項目を設定することで、ファイルのパーミッションが設定できます。例えばこれをビーストナンバーである666にしとけば、所有者がrootだろうがapacheだろうが、誰でも書き込める。さすがビーストナンバー。やりたい放題だな。もちろん777でも良い。もっとやりたい放題できる。さすがはスリーセブン。フィーバーしまくってんな。
実行コマンドの書き方が簡単になったのはありがたいかもですね。この程度なら僕の脳みそでも覚えられそう。2系の頃は毎回書き方を忘れて、「crontab -l」で中を見にいってたからな……どこかに書いとけよって気もするけどw
ところで、ビーストとゴーストって似てるね。おっかない存在ってところも似てるし。
ビーストとイーストも似てるな。イーストは別に怖くないけど。いや、そうでもないか。イースト菌が腸にたまると、過敏性腸症候群とかいう病気にかかる恐れがあるらしいからな。腸内でイースト菌の増殖がブーストすると、いつかバーストしちまうってことだ。気をつけよう。
ゴーストは実在するかどうかも分からないって考えると、イーストの方が怖いのかもしれないね。ビーストも腸を持っている以上は、イーストにやられる可能性があるわけだから、イーストが最恐ってことかもしれん。
つまり恐怖カースト的には、イーストが一番上で、その下にビースト、ゴーストと続き、怖いかどうかよく分からないローストされたお肉が来て、ワーストはイースト菌から作られたパンを焼いてバターをペーストしたトーストあたりで良いのかな?
ここらで一枚トーストが恐い。
その他のCakePHP3を触ってみましたの記事はこちら
まとめという名の箸休め
ちなみにそんときの記事がこれ。
Shellが動かねえぞ(Cake2系にバージョンアップしたら)
ってことで、今日は2系から3系への移り変わりを見て行きましょー。
2系のおさらい
上の記事にも書いてあるから、あえて書くこともないかもしれないですが、さら〜っとだけ、CakePHP2のシェルも確認しときましょう。//app/Console/Command/SampleShell.php
App::uses('Shell', 'Console');
class SampleShell extends Shell {
function execute() {
〜 処理を書く 〜
}
}
//shellの実行
# /usr/bin/php /var/www/cakephp/Cake/Console/cake.php Sample execute -app /var/www/cakephp/app
こうですね。ここでは「/var/www/cakephp」の下に、appやらCakeフォルダがあるという仮定。
appフォルダの中にConsoleってフォルダがあって、その中にさらにCommandってフォルダがあって、その下にshellファイルを作成します。そんであとは自分で作ったメソッドを実行すると。
3系のshell
3系では、srcフォルダの下にShellというフォルダがあるので、その中にshellファイルを作成します。//src/Shell/SampleShell.php
namespace App\Shell;
class SampleShell extends Shell {
public function execute() {
〜 処理を書く 〜
}
}
中身については、2系の頃とそんなには変わってないですかね。
ただ、シェルを実行するときのコマンドの打ち方は、ちょっと変わりました。
# /var/www/cakephp/bin/cake sample execute
2系の頃より、随分とシンプルになった気がしますね。
srcフォルダと同じ階層にbinというフォルダがあり、その中にcakeという実行ファイルらしきものが入っています。実行権限がない場合は、パーミッションを与えてあげてください。エサは与えなくて良いです。
シェル名の部分は、僕が試してみた限りは、大文字でも小文字でも動きます。
# /var/www/cakephp/bin/cake Sample execute
# /var/www/cakephp/bin/cake sample execute
どっちでも良いっぽい。
ちなみに、メソッド名を「main」にした場合は、記述を省略することができるようです。
//src/Shell/SampleShell.php
namespace App\Shell;
class SampleShell extends AppShell {
public function main() {
〜 処理を書く 〜
}
}
//shellの実行
# /var/www/cakephp/bin/cake sample
これで正常に動きます。もしかしたら2系のときもそうだったのかな? そういえば試してなかったや。
cacheファイルのパーミッション
もし、シェルをroot権限で実行した場合。tmpフォルダの中にあるキャッシュファイルの所有者が、rootになってしまうことがあるかもしれない。もしそうなると、パーミッション次第ではapacheがファイルを書き込んだりできなくなってしまうので、画面を表示したときにエラーが出てしまう。
failed to open stream: Permission denied in 〜
何かこんなエラーが出る。
いくつかやり方は考えられると思いますが、たぶん一番手っ取り早いのは、キャッシュファイルのパーミッションが666とか777になるように設定してしまうことだと思います。
configフォルダの中にあるapp.phpにキャッシュファイルの設定項目があるんですが、そこでパーミッションの設定ができます。
'Cache' => [
'default' => [
'className' => 'File',
'path' => CACHE,
],
'_cake_core_' => [
'className' => 'File',
'prefix' => 'myapp_cake_core_',
'path' => CACHE . 'persistent/',
'serialize' => true,
'duration' => '+2 minutes',
'mask' => 0666,//666にする
],
'_cake_model_' => [
'className' => 'File',
'prefix' => 'myapp_cake_model_',
'path' => CACHE . 'models/',
'serialize' => true,
'duration' => '+2 minutes',
'mask' => 0666,//666にする
],
],
「mask」っていう項目を設定することで、ファイルのパーミッションが設定できます。例えばこれをビーストナンバーである666にしとけば、所有者がrootだろうがapacheだろうが、誰でも書き込める。さすがビーストナンバー。やりたい放題だな。もちろん777でも良い。もっとやりたい放題できる。さすがはスリーセブン。フィーバーしまくってんな。
実行コマンドの書き方が簡単になったのはありがたいかもですね。この程度なら僕の脳みそでも覚えられそう。2系の頃は毎回書き方を忘れて、「crontab -l」で中を見にいってたからな……どこかに書いとけよって気もするけどw
ところで、ビーストとゴーストって似てるね。おっかない存在ってところも似てるし。
ビーストとイーストも似てるな。イーストは別に怖くないけど。いや、そうでもないか。イースト菌が腸にたまると、過敏性腸症候群とかいう病気にかかる恐れがあるらしいからな。腸内でイースト菌の増殖がブーストすると、いつかバーストしちまうってことだ。気をつけよう。
ゴーストは実在するかどうかも分からないって考えると、イーストの方が怖いのかもしれないね。ビーストも腸を持っている以上は、イーストにやられる可能性があるわけだから、イーストが最恐ってことかもしれん。
つまり恐怖カースト的には、イーストが一番上で、その下にビースト、ゴーストと続き、怖いかどうかよく分からないローストされたお肉が来て、ワーストはイースト菌から作られたパンを焼いてバターをペーストしたトーストあたりで良いのかな?
ここらで一枚トーストが恐い。
その他のCakePHP3を触ってみましたの記事はこちら
まとめという名の箸休め