2019-06-06
2020-05-30
Ruby on RailsでSambal (サンバル)を利用する

今回はRuby on Railsを利用してSambalコマンドで
Windowsの環境からファイル取得する方法を解説します。
Sambalとは
Linuxの環境で、smbclientを利用してWindowsの共有フォルダへアクセスし、ファイルを取得・操作できるソフトになります。
Rubyでもgemで提供されており、今回はsmbclientを利用してWindowsの共有環境からファイルを取得し、操作する方法を公開します。
プログラミング言語:Ruby 2.4.5
フレームワーク:Rails 4.2
※Ruby単体でも動作します。
Linuxにsamba-clientをインストール
yumコマンドでsamba-clientをインストールする
yum install -y samba-client
Gemをインストール
以下でインストール
gem install sambal
全サンプルコード
#以下は定数 利用するときは.freezeする必要あり DIR = '' HOST = '' USER = '' PASSWORD = '' LOCAL_FILE_PATH = 'tmp/fuga_fuga.csv' MAX_ATTEMPTS = 3 def import_file count = 0 begin count += 1 #指定環境へアクセス client = Sambal::Client.new(host: HOST, share: DIR, user: USER, password: PASSWORD) #共有環境からローカル環境にファイルを保存 client.get('hoge_hoge.csv', LOCAL_FILE_PATH) #ローカルからファイルを削除 File.delete(LOCAL_FILE_PATH) #共有環境からファイルを削除 client.del('test.csv') #Sambalコネクションを閉じる client.close Rails.logger.info('共有ドライブのファイルとローカルのファイル削除が完了しました') rescue => error #エラーをキャッチ 3回エラーになるとメールで送信 retry if count <= MAX_ATTEMPTS raise RuntimeError, error_mailer(error) end end #エラーメールを設定 def error_mailer(error_value) Rails.logger.error("#{error_value}") end
コード解説
以下でSambal::Client.newでドメインやホストを指定してSambaClientでアクセスします。
client = Sambal::Client.new(domain: 'WORKGROUP', host: '127.0.0.1', share: '', user: 'guest', password: '--no-pass', port: 445)
getコマンドで共有サーバーから指定ファイルをローカル環境にダウロードすることも可能です。
client.get('test.csv', 'local.csv')
deleteコマンドで共有環境のファイルを削除する事も可能です
client.del('test.csv')
Sambaでアクセスするとlsコマンドなどで、ファイル一覧を取得することも可能です。
client .ls #hashで返ってくる
以上になります。
その他関連記事
Ruby on Railsで外部APIを利用して、簡単なアプリケーションを作成する
Ruby on RailsとGoogle Geocoding APIで住所から緯度・経度を取得する方法
Rubyでサイトをスクレイピングし、ローカルに画像を保存する
あなたにお勧めの記事
前の記事
次の記事
2018/09/21