概要
ツールに論理ドライブ名("M:\..." など)で設定したファイルパスが
Alteryxサーバにパブリッシュすると意図せず相対パス"_externals\1\"に変わり、
これによりサーバでワークフローを実行した際にファイルへのアクセスエラーとなりました。
論理ドライブ名ではなく物理ドライブ名でパスを指定することでエラーは解消しましたが
このようなサーバの振る舞い(相対パスへの自動変換)は何を目的としたものでしょうか。
使用するファイルを相対パスの場所にコピーするのは運用的に難しいと思われますが
なにか便利な方法があってこの様に処理しているのであれば仕組みを知りたいと思っております。
例
パブリッシュ前の設定
フォルダ "M:\script\shell\bin\" が設定されている。
パブリッシュ後の設定
「ソースの書き込み」「結果の読み取り」がフォルダ "_externals\1\" に変わっている。
一方「コマンド」のフォルダは "M:\script\shell\bin" のまま変わっていない。
サーバのエラーメッセージ
サーバで実行したジョブが呼び出したマクロ "Get P-Value function" が
フォルダ "N:\ALTERYX\Service\Staging\...\_externals\1\" にアクセスできずにエラーとなっている。
解決済! 解決策の投稿を見る。
Galleryで実行する際は、テンポラリのフォルダにワークフローがコピーされ、そこで実行されるようになっています。そのため、基本的に相対パスに自動的に書き換えられるようになっているようです(パッケージドワークフローの動きにも似ていますね)
こちらはサーバーのGalleryで実行した結果ですが、Stagingというフォルダにテンポラリのフォルダが作成され、その中でワークフローが実行されています([Engine.WorkflowDirectory]という定数で確認できます)
基本的にはセキュリティのためかと思います。まぁ、ちゃんと動くように相対パスにしている、というところもあると思います。
なので、基本的に相対パスで動くようなワークフローにしておくのが良いと思っています。もしくは、ファイルパスをテキスト入力ツールやフォーミュラツールに埋め込んでおけば、書き換えされないという裏技もあります(もしくは、Galleryで実行する際に、テキストボックスツールで入力したファイルパスに保存するようなワークフローにしておく、とか)。
ご回答ありがとうございます。
サーバは定数[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 一時ディレクトリの内部に保存します。
と思われますが、これが存在しない場所を見ているのかな?
自分ではサーバ設定を見られないので、担当部署に確認してみます。
すみません、コマンド実行ツールのコマンド部分が書き換わってないことを見落としてました。
つまり、この結果だけ見ると、コマンド実行ツールのコマンドの部分はサーバー側がパスを書き換えない、ということになるので、要注意、ということになります。この動きは、若干一貫性がないように感じます・・・。
ちなみに、物理ドライブ名で解決、と記載頂いていますが、物理ドライブ名の場合Serverはパスを書き換えないからとなります。
あと、定数[Engine.WorkflowDirectory]は、あくまでワークフローが実行されているディレクトリの値を返すだけです。ステージングのディレクトリは、ServerのEngine設定で指定された場所となります。