確認現在の作業ディレクトリは、iノード番号に基づいており、そこに到達するために検索したものではありません。bashを使用しているため、次のように$ PWDを使用して、同じ名前の新しいディレクトリにcdできます。
cd $ PWD
説明のために、ダミーのdeployコマンドを作成しました。
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
最初のデプロイメントを作成し、cdでコーディングしてから内容をチェックしls -lai
て、iノードを確認できるようにしました。
ianh@abe:~/tmp$ ./,deploy first
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from first
++ chmod +x code/run
ianh@abe:~/tmp$ cd code
ianh@abe:~/tmp/code$ ls -lai
total 12
22945913 drwxr-xr-x 2 ianh ianh 4096 Apr 9 23:12 .
22937618 drwxrwxr-x 14 ianh ianh 4096 Apr 9 23:12 ..
22939455 -rwxr-xr-x 1 ianh ianh 22 Apr 9 23:12 run
次に、2回目のデプロイを実行します
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
そして、ディレクトリの内容を確認してください...今、ディレクトリには何もありません!'。'でさえない と「..」!これから、「..」cd ..
が存在しないため、実行時にbashが「..」ディレクトリエントリを使用していないことがわかります。その$ PWD処理の一部を推測します。他のいくつかの/古いシェルcd ..
はこの状況で処理しないので、最初に絶対パスに移動する必要があります。
ianh@abe:~/tmp/code$ ls -lai
total 0
Cdから$PWD
やり直してください:
ianh@abe:~/tmp/code$ cd $PWD
ianh@abe:~/tmp/code$ ls -lai
total 12
22945914 drwxr-xr-x 2 ianh ianh 4096 Apr 9 23:12 .
22937618 drwxrwxr-x 14 ianh ianh 4096 Apr 9 23:12 ..
22939455 -rwxr-xr-x 1 ianh ianh 20 Apr 9 23:12 run
ianh@abe:~/tmp/code$ ./run
hello from 2nd
現在のディレクトリ(。)のiノードがどのように変更されたかに注意してください。
あなたのデプロイスクリプトが例えば他のいくつかの名前、古いディレクトリを移動した場合mv code code.$$
で、デプロイスクリプトは、上記の、そして./run
動作します、しかし、あなたが使用するまでcd $PWD
、あなたが実行しているだろう、古い、新しいものではないコードを。
ianh@abe:~/tmp/code$ ./run
hello from 2nd
ianh@abe:~/tmp/code$ ../,deploy 3rd
++ cd /home/ianh/tmp
++ '[' -d code ']'
++ mv code code.9629
++ mkdir code
++ echo echo hello from 3rd
++ chmod +x code/run
ianh@abe:~/tmp/code$ ./run
hello from 2nd
ianh@abe:~/tmp/code$ cd $PWD
ianh@abe:~/tmp/code$ ./run
hello from 3rd
capistranoを使用した展開にも同じ問題があり(現在のリリースから現在のリリースへのシンボリックリンクがあります)、エイリアスを使用して実稼働/ステージング領域にcdし、RAIL_ENVを適切に設定します。
alias cdp='export RAILS_ENV=production; echo RAILS_ENV=$RAILS_ENV ; cd /var/www/www.example.com/current'
alias cds='export RAILS_ENV=staging; echo RAILS_ENV=$RAILS_ENV ; cd /var/www/staging.example.com/current'