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

このブログでは、フリーランス5期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

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

※記事内に提携先企業のアフィリエイト広告(リンク、バナー等)、Google広告を含む場合があります

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(削除したいファイルのパス)

一時ディレクトリ以下に、ファイルを作成する open

Tempfile.open('hoge')
=> #<File:/var/folders/v8/325t5vgd7c1dd6zjt6kdzz4r0000gn/T/hoge20200125-9684-qg12f3>

一時ディレクトリのパスを取得 path

Tempfileのインスタンス.path

一時ファイルを閉じる close

Tempfileのインスタンス.close
Tempfileのインスタンス.unlink
#=> 削除したら .pathメソッドで nilを返すようになります。

参考にしたリンク

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

一時ディレクトリ/一時ファイルを使用する | まくまく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日間なら返金できる」ので、

満足できなかった時でも安心です。


f:id:mah666hhh:20201129193352p:plain


【公式】RailsHack(レイルズハック)

【公式】Udemyで学んでみる