プロジェクト

全般

プロフィール

Bug(バグ) #1334

未完了

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

kei tomonaga さんが14年以上前に追加. ほぼ5年前に更新.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
2010-07-13
期日:
進捗率:

0%

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

説明

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

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

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

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


関連するチケット 3 (0件未完了3件完了)

関連している OpenPNE 3 - Bug(バグ) #1671: 携帯メール投稿でFatal Errorが発生するInvalid(無効)2010-10-13

操作
関連している OpenPNE 3 - Backport(バックポート) #1466: update symfony to 1.4.3 (同梱のsymfonyのバージョンを1.4.3へ上げる)Fixed(完了)Shinichi Urabe2010-07-02

操作
関連している OpenPNE 3 - Bug(バグ) #2397: プロジェクトルートに同梱されているsymfonyファイルを誤って更新しているFixed(完了)Yuya Watanabe2011-09-08

操作

Rimpei Ogawa さんが約14年前に更新

  • 3.6 で発生するかYes にセット

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) 特に対応しない(マニュアルのみの修正)
  • (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(最新)それぞれにおいて行いましたが同様の結果となりました.

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

Yuya Watanabe さんが約13年前に更新

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

kaoru n さんがほぼ5年前に更新

  • 対象バージョンOpenPNE 3.10.x にセット

他の形式にエクスポート: Atom PDF