Bug(バグ) #1334
未完了postfixでsymfonyコマンドの実行が失敗する
0%
説明
http://sns.openpne.jp/communityTopic/6103
表題の通りなのですが,「There are no tasks defined in the "openpne" namespace.」というエラーが表示されます. この症状はpostfixから実行した場合だけでなく,symfonyと同じ階層でない場所から,絶対パスでsymfonyを指定してコールした際も同様のエラーが表示されます. 解決方法はありませんでしょうか?
Minoru Takai さんが約14年前に更新
- 題名 を postfixからsymfonyを実行するとnamespaceのエラー・・・ から postfixからsymfonyを実行すると に変更
Minoru Takai さんが約14年前に更新
- 題名 を postfixからsymfonyを実行すると から postfixでsymfonyコマンドの実行が失敗する に変更
Minoru Takai さんが約14年前に更新
本件の問題について¶
OpenPNE 3.4.7 までは symfony 1.4.1 が使用されていましたが、3.5.0 時点から symfony 1.4.3 が使用されています。現在のOpenPNE最新版(master)では 1.4.6 が使われています。
http://github.com/openpne/OpenPNE3/commit/02b9af44d8ef1679d4d618b4d7e3d9637649faab#diff-107
この symfony のバージョンアップに併せて上の修正が行われていますが、
/path/to/symfony がコマンド(タスク)を実行する際に、以下の動作となります。
- symfony 1.4.1 時点であれば chdir(dirname(FILE)); の記述があるため、symfonyコマンドさえ叩ければ問題なく動作する
- symfony 1.4.3 時点では相対パスで書かれているため、symfonyコマンドが叩けても、作業ディレクトリが異なると正しく動作しない
これに関して問題が顕在化するのは、postfix などで作業ディレクトリを指定していない場合です。
報告されたトピックのコメントで示されていますが、symfony 1.4.3 に対応したOpenPNE3では、postfixなどでsymfonyタスクを記述する際にチェンジディレクトリ(cd コマンド)を記述する必要があります。
http://sns.openpne.jp/communityTopic/6103
qmailですが、beta5で同様のエラーが出ました。 別階層からのエラーをヒントに.qmail-defaultの この部分を | php /path/to/openpne/symfony openpne:execute-mail-action このように書き換えたら動作しました。 | cd /path/to/openpne ; php /path/to/openpne/symfony openpne:execute-mail-action 以上、ご報告まで。
この件について、OpenPNE 3.4.7 以前など symfony 1.4.1 時点であれば、cd コマンドを記述する必要性はありませんでした。
実際、マニュアルにも cd コマンドについては記述されていません。
しかし、symfony 1.4.3 以降を採用したバージョンであってもマニュアルに cd コマンドが必要である旨などが記述されていません。
http://github.com/openpne/OpenPNE3/blob/master/doc/ja/OpenPNE3_Setup_Guide.txt#LID162
対応として考えられる手段¶
- (1) symfony 1.4.1 のままにする
- (1-1) マニュアルに cd コマンドの説明は載せないままにする
- (1-2) マニュアルに cd コマンドの説明を載せる(1.4.1では問題は起こらないが、この件について説明をする)
- (2) symfony 1.4.3 以降を使う
- (2-1) マニュアルに cd コマンドの説明は載せないままにする
- (2-1-1) cd コマンドがなくても postfix などで正常に動作するように chdir() を記述するなどする
- (2-1-2) 特に対応しない(現状の3.6以上)
- (2-2) マニュアルに cd コマンドの説明を載せる
- (2-2-1) cd コマンドがなくても postfix などで正常に動作するように chdir() を記述するなどする
- (2-2-2) 特に対応しない(マニュアルのみの修正)
- (2-1) マニュアルに cd コマンドの説明は載せないままにする
- (3) この件について抜本的に考え直し、採用する symfony のバージョンについても検討する(OpenPNE3.6, 3.7以降で採用するsymfonyのバージョン、およびOpenPNE3.4.8以降で採用するsymfonyのバージョン)
(1-1), (1-2), (2-1-1), (2-1-2), (2-2-1), (2-2-2), (3)
以上の7通りのいずれかが考えられると思います。
- 好ましいと思われるもの
- (2-1-1) マニュアルは cd コマンドの説明なし、postfix に cd コマンド記述がなくても動く
- (2-2-1) マニュアルに cd コマンドの説明を記述、cd コマンド記述がなくても動く
- (2-2-2) マニュアルに cd コマンドの説明を記述、cd コマンド記述がないと動かない
- (3) symfonyの仕様を把握してOpenPNEで採用するsymfonyのバージョンを検討し直す
- 対応してもしなくても問題のないもの
- (1-1) 1.4.1 のまま(OpenPNE 3.4.7 以前)に合わせる
- (1-2) 1.4.1 のままで、マニュアルに cd コマンドの説明を記述する
- 好ましくないもの
- (2-1-2) マニュアルは cd コマンドの説明なし、cd コマンド記述がないと動かない
- symfony 1.4.1 からバージョンアップした理由
- 1.4.1 では記述されていた chdir() が削除されている理由
- 1.4.3 以降で chdir() を追加するといった対応の適正について
また、上記の内容に誤解があるかもしれません。
現状のOpenPNE 3.6系が(2-1-2)の状態であるように見受けられるため、この件について改善対応を進めたいと考えます。
この問題に関連して¶
#1466 では OpenPNE 3.4.8 に対する symfony 1.4.3 化が検討されていますが、この問題を考慮する必要があります。特に、3.4.8 はマイナーバージョンアップとなるため、3.4.7 との symfony のバージョンが異なることで cd コマンドの有無に関する問題が生じる可能性があることについては注意しなければなりません。
Yuya Watanabe さんが約13年前に更新
バージョンアップが成功しているかどうかの確認¶
chdir()が削除された経緯について調査をしましたが,そのような事実が確認できなかったため,バージョンアップ自体が成功しているかどうかを確認しました.内容としてはsymfonyのプロジェクトを新規に作成し,該当するsymfonyファイルがどのような内容になっているかを確認しました.理由としてはバージョンアップの方法が確認できなかったため,新規インストールの内容によってそれを判断しようとしたためです.
mkdir project cd project mkdir lib mkdir lib/vendor cd lib/vendor wget http://www.symfony-project.org/get/symfony-1.4.3.zip unzip symfony-1.4.3.zip ln -s symfony-1.4.3 symfony cd ../.. ./lib/vendor/symfony/data/bin/symfony generate:project project cat symfony
とすると
#!/usr/bin/env php <?php /* * This file is part of the symfony package. * (c) Fabien Potencier <fabien.potencier@symfony-project.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ chdir(dirname(__FILE__)); require_once(dirname(__FILE__).'/config/ProjectConfiguration.class.php'); include(sfCoreAutoload::getInstance()->getBaseDir().'/command/cli.php');
と表示されます。これは
http://github.com/openpne/OpenPNE3/commit/02b9af44d8ef1679d4d618b4d7e3d9637649faab#diff-107
における変更前の状態であると思います.変更後のsymfonyの内容は,今回の場合は
cat lib/vendor/symfony/data/bin/symfony
とすると得られるものです.
変更前のファイルはプロジェクト生成タスクのスケルトンから得られていると思います.
cat lib/task/generator/skeleton/project/symfony
以上のことをsymfonyのバージョン1.4.1,1.4.2,1.4.13(最新)それぞれにおいて行いましたが同様の結果となりました.
これによりバージョンアップを誤って行ってしまったのではないかということが考えられます.