とりあえず日本語の情報が少なかったのでメモ
Railsでassets下に置いた画像のURLだけ取得するには、
asset_url("images/以下のパス")
asset_url("admin/icon.png") // 例
asset_url "admin/icon" // 例:()と拡張子を省略
というようにしてやればできました。
経緯
Viewでassets以下の画像を表示する方法としてimage_tag("ファイル名")
ヘルパーがありますが、これはURL含めたタグ全部を返すヘルパーです。私はどうしてもそのURLだけを取得したかったのです。
(以上です、この先は私の日記です)
production環境への移行に躓く
このヘルパーが必要になった経緯をメモ(日記)します。
まず私はWeb開発初心者でして、development環境でRailsアプリを元気に作って、ようやく完成と言える所まで来たので、
「さあ!本番環境に移そう、そういえば環境をproductionにしないといけないとか聞いたことある・・エラー画面消すだけじゃだめなん?」
とか思いつつ、「今までの開発みたいに検索したらたくさん情報出てきてくれるだろうな〜」と思って検索しました。そしたら急に、今までの親切なネットはどこへ・・って悲しくなるほど情報が少ないんですね。「初心者向け!RailsアプリをProduction環境にしよう!」みたいな記事が6件ぐらいヒットするのかと思ってました。実はみんなdevelopmentのまま世に出してるのでは・・・と思ってしまう。
それでも親切な記事はいくつかあって、それを見ると、特に説明もなくプリコンパイルがどうとか暗号化の鍵がどうとか書いてあったので、はーと思いつついろいろ調べました。そしたらどうやらproduction環境ではassetファイルを全部コンパイルしてpublic以下に静的なファイルとして設置しないといけないらしいですね。
こういうのって常識なんだろうなあと意気消沈しつつ、rails assets:precompile RAILS_ENV=production
ってやればプリコンパイルできるらしいと知り実行するも、yarnが必要です的なエラーがでて、「はーなんでjsのパッケージ使うんだrubyでやってよ」と愚痴りながらインストールしました。
やっとproduction環境に!しかし画像が読み込まれない
ようやくproduction環境になり、いくつかのエラーを乗り越えてサイトが表示されたのですが、画像が表示されない・・。ただこれはすごく親切な記事がヒットして助かりました。
developmentではヘルパーを使わずに画像にアクセスするときはassets/images/logo.png
というようなパスでOKでしたが、productionでは全てのファイルにフィンガープリントが付いているのでこれではアクセスできないとのこと。
ということで、直接assets/...
と書いていた箇所の画像が読み込まれていなかったようです。使用しているjsのパッケージの都合上URLが必要なので、それを動かすためにはフィンガープリント付きの画像URLだけを取得する方法が必要でした。調べた結果、この記事の始めに示した方法がわかったという日記でした。