Project

General

Profile

Bug(バグ) #1334

postfixでsymfonyコマンドの実行が失敗する

Added by kei tomonaga about 11 years ago. Updated over 1 year ago.

Status:
New(新規)
Priority:
Normal(通常)
Assignee:
-
Target version:
Start date:
2010-07-13
Due date:
% Done:

0%

3.6 で発生するか:
Yes
3.8 で発生するか:
Unknown (未調査)

Description

http://sns.openpne.jp/communityTopic/6103

表題の通りなのですが,「There are no tasks defined in the "openpne" namespace.」というエラーが表示されます.

この症状はpostfixから実行した場合だけでなく,symfonyと同じ階層でない場所から,絶対パスでsymfonyを指定してコールした際も同様のエラーが表示されます.

解決方法はありませんでしょうか?


Related issues

Related to OpenPNE 3 - Bug(バグ) #1671: 携帯メール投稿でFatal Errorが発生する Invalid(無効) 2010-10-13
Related to OpenPNE 3 - Backport(バックポート) #1466: update symfony to 1.4.3 (同梱のsymfonyのバージョンを1.4.3へ上げる) Fixed(完了) 2010-07-02
Related to OpenPNE 3 - Bug(バグ) #2397: プロジェクトルートに同梱されているsymfonyファイルを誤って更新している Fixed(完了) 2011-09-08

History

#1 Updated by Rimpei Ogawa about 11 years ago

  • 3.6 で発生するか set to Yes

#2 Updated by Minoru Takai almost 11 years ago

  • Subject changed from postfixからsymfonyを実行するとnamespaceのエラー・・・ to postfixからsymfonyを実行すると

#3 Updated by Minoru Takai almost 11 years ago

  • Subject changed from postfixからsymfonyを実行すると to postfixでsymfonyコマンドの実行が失敗する

#4 Updated by Minoru Takai almost 11 years ago

本件の問題について

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) 特に対応しない(マニュアルのみの修正)
  • (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 コマンドの有無に関する問題が生じる可能性があることについては注意しなければなりません。

#5 Updated by Yuya Watanabe about 10 years ago

バージョンアップが成功しているかどうかの確認

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(最新)それぞれにおいて行いましたが同様の結果となりました.

これによりバージョンアップを誤って行ってしまったのではないかということが考えられます.

#6 Updated by Yuya Watanabe about 10 years ago

#2397 が本チケットの修正内容を含むため, #2397 の修正の動きに対して本チケットも対応することが望ましいと思われます.

#7 Updated by kaoru n over 1 year ago

  • Target version set to OpenPNE 3.10.x

Also available in: Atom PDF