Free Trial

ディスカッション

答えを見つけ、質問し、Alteryx の専門知識を共有してください。
解決済み

ご質問)Alteryxサーバによるツール設定内ファイルパスの書き換え

Yoshiro_Fujimori
オーロラ

概要

ツールに論理ドライブ名("M:\..." など)設定したファイルパス
Alteryxサーバにパブリッシュすると意図せず相対パス"_externals\1\"に変わり、

これによりサーバでワークフローを実行した際にファイルへのアクセスエラーとなりました。

 

論理ドライブ名ではなく物理ドライブ名でパスを指定することでエラーは解消しましたが
このようなサーバの振る舞い(相対パスへの自動変換)は何を目的としたものでしょうか。

使用するファイルを相対パスの場所にコピーするのは運用的に難しいと思われますが
なにか便利な方法があってこの様に処理しているのであれば仕組みを知りたいと思っております。

 

パブリッシュ前の設定

  • "Get P-Value function"マクロは「コマンド実行」ツールで外部プログラム "M:\script\shell\bin"のフォルダのファイルを参照している。
    (エラーが表示されているが、当該パスはサーバからのみアクセスでき、PCからはアクセスできないため、このエラーは想定通り)

Yoshiro_Fujimori_0-1671688255916.png

 

フォルダ "M:\script\shell\bin\" が設定されている。

BeforePublish.png

 

パブリッシュ後の設定

「ソースの書き込み」「結果の読み取り」がフォルダ "_externals\1\" に変わっている。

一方「コマンド」のフォルダは "M:\script\shell\bin" のまま変わっていない。

AfterPublish.png

 

サーバのエラーメッセージ

サーバで実行したジョブが呼び出したマクロ "Get P-Value function" が

フォルダ "N:\ALTERYX\Service\Staging\...\_externals\1\" にアクセスできずにエラーとなっている。

Error.png

3件の返信3
AkimasaKajitani
17 - Castor
17 - Castor

@Yoshiro_Fujimori さん

 

Galleryで実行する際は、テンポラリのフォルダにワークフローがコピーされ、そこで実行されるようになっています。そのため、基本的に相対パスに自動的に書き換えられるようになっているようです(パッケージドワークフローの動きにも似ていますね)

 

こちらはサーバーのGalleryで実行した結果ですが、Stagingというフォルダにテンポラリのフォルダが作成され、その中でワークフローが実行されています([Engine.WorkflowDirectory]という定数で確認できます)

AkimasaKajitani_0-1671706074003.png

 

基本的にはセキュリティのためかと思います。まぁ、ちゃんと動くように相対パスにしている、というところもあると思います。

 

なので、基本的に相対パスで動くようなワークフローにしておくのが良いと思っています。もしくは、ファイルパスをテキスト入力ツールやフォーミュラツールに埋め込んでおけば、書き換えされないという裏技もあります(もしくは、Galleryで実行する際に、テキストボックスツールで入力したファイルパスに保存するようなワークフローにしておく、とか)。

 

 

AkimasaKajitani_1-1671707134295.png

 

AkimasaKajitani_2-1671707141373.png

 

Yoshiro_Fujimori
オーロラ

@AkimasaKajitani さん

ご回答ありがとうございます。

サーバは定数[Engine.WorkflowDirectory]を参照して相対パスを書き換えているとすると
私の見たエラーはサーバが自分で書き換えたパスに対して

Cannot access the folder N:\ALTERYX\Service\Staging\...

と言っていますが、
サーバが持っている定数の設定値がオカシイのでしょうか?

該当する設定値は https://help.alteryx.com/ja/20223/server/engine

Engine Configuration (Engine 設定)
Package Staging Directory (パッケージステージングディレクトリ)
Server に保存されているワークフローを編集するときに、ワークフローに関連付けられているファイルが一時的に保存される場所です。

既定では、Server はこれらのファイルを Engine 一時ディレクトリの内部に保存します。

と思われますが、これが存在しない場所を見ているのかな?

自分ではサーバ設定を見られないので、担当部署に確認してみます。

AkimasaKajitani
17 - Castor
17 - Castor

@Yoshiro_Fujimori さん

 

すみません、コマンド実行ツールのコマンド部分が書き換わってないことを見落としてました。

 

つまり、この結果だけ見ると、コマンド実行ツールのコマンドの部分はサーバー側がパスを書き換えない、ということになるので、要注意、ということになります。この動きは、若干一貫性がないように感じます・・・。

 

ちなみに、物理ドライブ名で解決、と記載頂いていますが、物理ドライブ名の場合Serverはパスを書き換えないからとなります。

 

あと、定数[Engine.WorkflowDirectory]は、あくまでワークフローが実行されているディレクトリの値を返すだけです。ステージングのディレクトリは、ServerのEngine設定で指定された場所となります。