herokuで画像ファイルをassets/下に置いても認識されない
背景
テキストを音声にしてmp3ファイルを生成し、assets/audiosディレクトリ以下に保存
1のファイルを取得しS3にアップロード
1のファイルを削除するということをしていました。
が、herokuではどうもassets/audios以下を読み込んでくれない。
対策
そのため、Tempfile, Tempdirライブラリを使用し、
- mp3ファイルをTempfileとして生成し、Tempdirに仮置き
- S3にアップロード
- 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(削除したいファイルのパス)
一時ディレクトリ以下に、ファイルを作成する 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 3.3 リファレンスマニュアル)
一時ディレクトリ/一時ファイルを使用する - まくまくRubyノート
Fileクラスから、ディレクトリ名、ファイル名、拡張子を取得する方法 http://rubytips86.hatenablog.com/entry/2014/03/28/141244
【Ruby入門】ファイルの移動、コピー、削除 | ポテパンスタイル
RailsやRubyを学びたい人へ
RailsやRubyを学びたい人は、
RailsHack(レイルズハック)という、
最近できた新しいプログラミングスクール(今なら通常価格69,800円が、早期割で29,800円!)か、
Udemy で下記のコースを受講すると良いです★
✅1. フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座
✅2. 【はむ式】ハンズオンで学ぶRuby on Rails 6【Dockerにも触れられる】 <- おすすめ。ハムさんはReactやTypeScriptの教材も非常に丁寧。
✅3. はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう
また、
Udemy は定期的にセールをやっていますし(90%OFFとかもザラ)、
「30日間なら返金できる」ので、
満足できなかった時でも安心です。