私は、サーバ上に存在するファイルに対していくつかのファイル操作を行うメソッドを記述しようとしています。たとえば、ソースからターゲットへのコピー、ファイルのシンボリックリンク、ファイルの読み込みなどです。ここでは、2つのシナリオ、つまりサーバーをローカルまたはリモートにする必要があります。リモート/ローカルサーバーのファイル操作メソッドをRubyでより効率的に書く方法
リモートサーバーのシナリオでは、(net/sshを使用して)サーバーに接続してから、exec
メソッドを使用してシェルコマンドを実行しています。ローカルサーバーでは、私はRuby FileUtils
メソッドを使用している接続を確立する必要はないので。あなたの参照のためにコードの部分を貼り付けました。
誰かがこの方法をより効率的に書くよう提案できるかどうかを確認したいと考えました。
def create_link
begin
if self.particular_file_exists?
if [email protected]
@ssh.exec!("ln -s file1 file1-dump")
else
FileUtils.ln_sf("file1", "file1-dump")
end
end
rescue => e
$LOG.log(2, "Error occurred")
end
end
尋ねるべきで、それはあなたに非効率的なように見えるのでしょうか?あなたはそれをプロファイリングしましたか? – Makoto
ダブルネガティブな条件を避けるようにしてください。ここで 'else'は* if-not-not-sshがローカル*であるかどうかを評価します。 2つの線を折り返して、ネガを取り除くと、よりクリーンなものになります。 'unless!@ ssh.not_remote? 'のようなコードが出る前にこれに注意する価値があります。そして、あなたはそれが何を意味するのか理解できません。 – tadman
これは、2つの異なるハンドラクラスによって実装された標準インタフェースを持つと、動作全体を簡単に切り替えることができる場合もあります。同じ問題を解決するための2つの異なるアプローチがある場合は、 'if'ステートメントではなく、サブクラスを使用してください。 – tadman