スリ飯屋Malankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

herokuで画像ファイルをassets/下に置いても認識されない

herokuで画像ファイルをassets/下に置いても認識されない

  1. テキストを音声にしてmp3ファイルを生成し、assets/audiosディレクトリ以下に保存

  2. 1のファイルを取得しS3にアップロード

  3. 1のファイルを削除するということをしていました。

が、herokuではどうもassets/audios以下を読み込んでくれない。

そのため、Tempfile, Tempdirライブラリを使用し、

  1. mp3ファイルをTempfileとして生成し、Tempdirに仮置き
  2. S3にアップロード
  3. 1のファイルを削除する

という手順を取ることで対応出来ました。

  • 参考にした、同じ状況に陥っているQA

https://qa.atmarkit.co.jp/q/2376

ちなみに、assets/audios/以下 にファイルを置くのは、Railsのaudio_tagというViewのhelperメソッドを使うためです。

ここに置くことで、Viewから音声ファイルを参照出来、対象の音声ファイルを再生出来ます。

audio_tag (ActionView::Helpers::AssetTagHelper) - APIdock


ファイル操作のメソッド

ファイル単体を削除する

FileUtils.rm(削除したいファイルのパス)

Tempdir, Tempfileのメソッド

一時ディレクトリ以下に、ファイルを作成する open
Tempfile.open('hoge')
=> #<File:/var/folders/v8/325t5vgd7c1dd6zjt6kdzz4r0000gn/T/hoge20200125-9684-qg12f3>
一時ディレクトリのパスを取得 path
Tempfileのインスタンス.path
一時ファイルを閉じる close
Tempfileのインスタンス.close
一時ファイルを削除 unlink
Tempfileのインスタンス.unlink
#=> 削除したら .pathメソッドで nilを返すようになります。
参考にしたリンク

class Tempfile (Ruby 2.7.0 リファレンスマニュアル)

一時ディレクトリ/一時ファイルを使用する | まくまくRubyノート

Fileクラスから、ディレクトリ名、ファイル名、拡張子を取得する方法 http://rubytips86.hatenablog.com/entry/2014/03/28/141244

【Ruby入門】ファイルの移動、コピー、削除 | 「ポテパンスタイル」