9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsでassets下の画像URLだけを取得する

Last updated at Posted at 2019-03-24

とりあえず日本語の情報が少なかったのでメモ

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だけを取得する方法が必要でした。調べた結果、この記事の始めに示した方法がわかったという日記でした。

9
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?