Header
2019-06-06
2019-06-21

Ruby on RailsでSambal (サンバル)を利用する

2019 06 07 1036833

今回は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で返ってくる

gem公式サイト

以上になります。

その他関連記事

Ruby単体でAPIを操作する|Udemy

Ruby on Railsで外部APIを利用して、簡単なアプリケーションを作成する

Rubyでサイトをスクレイピングし、ローカルに画像を保存する

Rubyでツイッターのアカウントを自動ブロックする

CSSだけでOK!ヘッダーとサイドバーを固定する|サンプルコード付き

前の記事
次の記事
人気記事
カテゴリーから記事を探す