アプリケーションを起動せず、行いたい処理をCUI(コマンドプロンプトやターミナル)から実行できます。CSVデータのインポートなど、サーバーを起動せず任意の処理を実行する際にこの機能がよく利用されます。 タスクを定義しよう! 今回は、CSVデータをデータベースへ登録するアプリを元に、Rakeタスクの実装について学んでいきましょう。まずは、実装対象となるアプリを立ち上げます。以下のコマンドを入力してください。
概要 railsでコマンドラインスクリプトを各方法はtaskとrunnerと2種類あります。 taskは引数の扱いが微妙で、オプションも扱えません。書き方も独特なためイマイチ好きになれません。またspringも効かないので読み込みも遅いです。 runnerはspringが効くので起動は早めですが引数を自分で解析しないといけません。 Thorというrubyのコマンドライン用のツールがあって引数やオプションを柔軟に扱えて便利です。以前「Thorのコマンドの中でrailsのActiveRecordを使う」という記事を書きましたが、spring経由で起動できないので起動が遅くイマイチでした。 実はその記事を書いた時点でrunnerの存在をすっかり忘れてました。runner経由で起動し、Thorで引数の解析を出来ないか試したらあっさり動きました。 コード スクリプトを置く場所はどこでもOKですが、t
はじめに 外部APIのキー情報やアクセストークンなどの機密情報を外部に漏らしてしまうと悪用される可能性があります。実際、外部APIにアクセスするための機密情報をオンコードで記述し、そのソースコードをGitHubに上げてしまったために、外部APIを不正利用(ただ乗り)されてしまったという事例もあります。 Railsにはそういった機密情報を暗号化し、安全に保護するCredentialsという機能があります。Credentialsを使えば、復号化キーを漏洩/盗難/紛失しない限り、機密情報を保護することができます。 本記事では、Credentialsを使った機密情報の保護について説明します。 Credentialsの基本 CredentialsはRails 5.2から導入された機能です。Railsアプリを作成したときに、暗号化ファイルとその復号化キーのセットが生成されます。 機密情報の復号化 Cr
諸事情でbase64でエンコードさえている画像が沢山保存されているブラウザのキャッシュから実画像ファイルを抽出する必要があった。base64の文字列をインスペクターで抽出して、以下のスクリプトにコピペして実行すると画像を抽出できる。 単に画像の形式の宣言部分を端折ってbase64の文字列部分だけをライブラリでデコードすれば良い。 拡張子は合わせる必要がある。 require 'base64' str='data:image/jpeg;base64,...' # コピペする File.open("%04d.jpg" % i, 'wb') do|f| f.write(Base64.decode64(str['data:image/jpeg;base64,'.length .. -1])) end require 'base64' i = 0 File.foreach('photos.base6
what File.openとFile.writeを使ったコピーで、テキストファイルはうまくいくが、画像ファイルがうまくいかないので、うまくいくようにする。 以下のファイルがあります C:\enjoy_ruby\file\file.rb ※rubyファイル C:\enjoy_ruby\file\original.jpg ※適当な画像ファイル 21KB Rubyファイル original = File.open("original.jpg", "r") # 読み込みモード copy = File.open("copy.jpg", "w") # 新規作成書き込みモード copy.write(original.read) original.close copy.close 上記を実行すると、エラーは出ません。 結果は、copy.jpg はできるのですが、1KBしかなく画像になっていません。 ため
とあるバイナリデータをファイルに書き出して同じデータが読み出されるか確認したい 思えばやった事がなかった ぐぐりながらやってみたけど、とりあえず File.binwrite File.binread 使っとけばいいんだろうか? RUBY_VERSION # => "2.5.0" require 'tempfile' test_file_path = File.join(Dir.tmpdir, 'delete_me.bin') test_data = (0..255).to_a.pack('C*') File.binwrite(test_file_path, test_data) # この辺りでファイルを消したり戻したり検証したかった処理を行う puts File.binread(test_file_path) == test_data # => true puts `hexdump -C
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く