
2021年6月記載。
とあるゲームサーバーのmysqlの自動バックアップを実装したく、DropBoxのAPIを利用したのですが、その時に行ったことを軽くまとめておきます。
なお、自動バックアップでは「backup + whenever」がよく使われる手法みたいですが、私は(CentOS8のお引越しの件から)サーバーに「backup」の設定を増やしたくなかったので「DropBoxAPI + Google Apps Script」で自動バックアップを試しています。
1,DropBoxのdeveloperにアプリを登録
https://www.dropbox.com/developers/apps
以前と違い、審査とかは消えていました。通常の設定であれば、即座に使えます。
2,gemfileに「gem "dropbox_api"」を追加して「bundle_install」
こちらも以前と違い「dropbox-sdk」は使わなくて良いようです。
「dropbox_api」(gem "dropbox-api"は別物なので注意)は設定がとても簡単なので、オススメです。
アクセストークン1つだけで何とでもなります。
3,DropBoxに登録したアプリのパーミッションの変更
上書きの許可をしておかないと、以下のような401エラーが返却されてきます。
DropboxApi::Errors::HttpError (HTTP 401: {"error_summary": "missing_scope/...","error": {".tag": "missing_scope", "required_scope": "files.content.write"}}):
4,DropBoxの設定で、アクセストークンを生成
「Access token expiration」で「No expiration(アクセストークンの寿命を無し)」にした後、generateで生成します。
5,コードを使ってアップロード
class DropboxManager
def test_update()
api1 = ENV['DROPBOX_API_TOKEN']
exit if api1.nil?
require 'dropbox_api'
db_client = DropboxApi::Client.new(api1)
file_name = 'db/test.txt'
file_content = IO.read file_name
db_client.upload "/test.txt", file_content
end
end
参考:
https://rochefort.hatenablog.com/entry/dropbox_sdk_is_unsupported_ruby
上記のコードでは「Railsのdbフォルダ」に作成した「text.txt」を「dropboxのアプリ内のフォルダのトップ」に「test.txt」として保存しています。
ENV['DROPBOX_API_TOKEN']は、文字列でDropBoxのアクセストークン("*******"的なもの)を直に記述しても動きますが、githubにpublicで公開するとクラッキングされるので、サーバーの環境変数から読み込むのが無難です(がprivateなら気にしなくても良いのかもしれない)。
以上です。(多分)簡単でしたね!










