2

これを考えると(特に...):

compile_coffee() {
    echo "Compile COFFEESCRIPT files..."
    i=0
    for folder in ${COFFEE_FOLDER[*]}
    do
        for file in $folder/*.coffee
        do
            file_name=$(echo "$file" | awk -F "/" '{print $NF}' | awk -F "." '{print $1}')
            file_destination_path=${COFFEE_DESTINATION_FOLDER[${i}]}
            file_destination="$file_destination_path/$file_name.js"
            if [ -f $file_path ]; then
                echo "+ $file -> $file_destination"
                $COFFEE_CMD $COFFEE_PARAMS $file > $file_destination #FAIL
                #$COFFEE_CMD $COFFEE_PARAMS $file > testfile
            fi
        done
        i=$i+1
    done
    echo "done!"
    compress_javascript
}

明確にするために、 #FAIL 行を除くすべてが問題なく動作します。何か間違ったことをしている場合は、教えてください。問題は次のとおりです。

  • 行が実行され、必要な処理が行われますが、「file_destination」に入れたファイルは書き込まれません。
  • そのルートでフォルダーを削除すると (このスクリプトに関連しています。以下を参照してください)、bash がスローし、フォルダーが存在しないというエラーが表示されます。
  • フォルダーを再度作成すると、エラーはありませんが、ファイルもありません。
  • $file_destination を「testfile」に変更すると、正しい内容のファイルが作成されます。
  • $file_destination パスは問題ありません - ご覧のとおり、私のスクリプトはそれをエコーし​​ます -
  • 行全体をエコーし​​、params を使用して正確なコマンドをコピーし、スクリプトと同じディレクトリ内のシェルで実行すると、機能します。

これの何が悪いのかわからない、2時間考えていた...

スクリプト出力 (実際のパス):

(alpha)[pyron@vps herobrine]$ ./deploy.sh compile && ls -l database/static/js/
===============================
=== Compile ===
Compile COFFEESCRIPT files...
+ ./database/static/coffee/test.coffee -> ./database/static/js/test.js  
done!
Linking static files to django staticfiles folder... done!
total 0

完全なコマンド:

coffee --compile --print ./database/static/coffee/test.coffee > ./database/static/js/test.js

私は何が欠けていますか?

編集私はこれを通していくつかの進歩を遂げました。シェルでは、python virtualenv を非アクティブ化するとスクリプトは機能しますが、スクリプトから非アクティブ化を呼び出すと、コマンドが見つからないと表示されます。

4

2 に答える 2

0

問題は bash スクリプト自体ではないことがわかりました。数行後、デプロイ スクリプトは django から collectstatic メソッドを実行します。その行までファイルがそこにあることに気付き、コレクションにキャッシュシステムがあることを読み始めました。スクリプトを機能させるには、すべての静的ファイルを削除して最初からやり直す必要があるため、非常に奇妙な IMO です。

つまり...問題はbashスクリプトではなく、djangoキャッシュシステムでした。とにかく、私は私に評判を与えていません。

完全なデプロイ スクリプトはhttps://github.com/pyronhell/deploy-script-boilerplateにあります。改善できる場合は、どなたでも大歓迎です。

乾杯。

于 2012-10-01T11:07:16.607 に答える
0

宛先ファイルの名前にスペースなどの文字が含まれていないと仮定すると、ディレクトリが存在するなど. 2>&1 などを追加してみます

$COFFEE_CMD $COFFEE_PARAMS $file > testfile 2>&1

コンパイラは、必要な出力および/またはコンパイル メッセージを stdout ではなく stderr に配置する場合があります。コンパイラ名だけでなく /usr/bin/coffee など、 coffee へのフル パスを指定することもできます。

于 2012-09-16T12:03:23.567 に答える