web-dev-qa-db-ja.com

Rails 4つの画像がherokuにロードされていない

1日の大半は、Herokuアプリで画像を読み込むために費やしました。私が試みるすべてはローカルで動作しますが、herokuにデプロイされた後は動作しません。

Pngファイルをアセットの下の画像フォルダーに保存しています。次のようなCSSの構文でこれらの画像を参照しています。

#signin {
  background: url(<%= asset_path 'sf.png' %>);
  background-size: 100%;
}

Herokuで背景を調べると、assets/sf.pngリンクがありますが、クリックすると壊れた画像が表示され、正しく読み込まれなかったことが示されます。

config.serve_static_assets = falseファイル内のproduction.rbをtrueとfalseの間で切り替えてみましたが、どちらも機能しません。

私も持っています

group :production do
  gem 'pg'
  gem 'Rails_12factor'
end

プリコンパイルは常に成功します。

Rails 4.他に何を試してみるべきか?

64
brad

別の問題として、これを抱えていたのは、アセットをherokuに読み込む前にローカルでプリコンパイルしていたことです。これには、以下にある別の一連の手順に従う必要があります。アセットをローカルでプリコンパイルする場合は、次の手順に従う必要があります。そうしないと、アセットフォルダーに加えた更新がprodに反映されません。

https://devcenter.heroku.com/articles/Rails-asset-pipeline

Rails_ENV=production bundle exec rake assets:precompile

commitおよびPushからサーバーへ。

27
brad

この機能を実現するには、いくつかのソリューションを組み合わせる必要がありました。これが私がしたことです。

宝石ファイル

gem 'Rails_12factor', group: :production

私のHerokuコンソール

heroku labs:enable user-env-compile -a yourapp

production.rb

config.serve_static_assets = true
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
config.assets.compile = true

アセットをローカルでプリコンパイルする必要はありませんでした。

92
kal

解決するには2つのことを行う必要があります。最初に、production.rbファイルでこれらの2行をfalseからtrueに変更します。

      config.assets.compile = true
      config.assets.digest = true

次に、画像に対してこのような構文を使用している場合

    background: url("imgo.jpg") 

に変更する

     background: image-url("image.jpg")

私はそれがあなたの仕事をすることを願っています。

55
Prabhakar

同様の問題がありましたが、custom.css.scssの次の行で解決しました。これがうまくいくかどうか教えてください。

background: image-url('sf.png')

ERBまたはSassを使用しているかどうかに応じて、さまざまな方法で行われているアセットを参照します Ruby on Rails Guide .

12
Percevalve

コメントする評判はありませんが(まだ)、Heroku labs機能が削除されていることに注意することが重要です。そのため、「No such feature:user-env-compile」エラーが表示されます。

詳細: https://github.com/Crowdtilt/CrowdtiltOpen/issues/251

3
alightholder

Rails( '4.1.5')Herokuでは表示されないが、ローカルで表示される画像について同様の問題がありました。 Paperclipまたはcarrierwave gemを使用していません。locallyをプリコンパイルし、Rails_ENV = productionをプリコンパイルします。githubにプッシュすると、Herokuに正常にデプロイされます。

私が持っていることで問題を解決しました:

config.serve_static_assets = true
config.assets.compile = true
config.assets.js_compressor = :uglifier
config.assets.digest = true

// delete precompiled assets
bundle exec rake assets:clobber --trace
RAIL_ENV=production bundle exec rake assets:clobber --trace

app/assetsからpublic/assetsに画像をコピーしました。その後:

// tests should pass
bundle exec rake assets:precompile --trace
Rails_ENV=production bundle exec rake assets:precompile --trace

git commit
git Push

そして、Herokuで問題なく動作していました。

2
Batz

私も多くのソリューションを試しましたが、非常に貴重なソリューションと説明を見つけました。Herokuはパブリックフォルダー内のアセットを探します。つまり、アセットをプリコンパイルする必要があります。私の開発環境はgem sqliteに設定され、productionはpgに設定されているので、これを実行します。

production.rbで

config.serve_static_assets = true

gem pgがインストールされていない場合は、コメントアウトし、gem sqliteを使用するように運用環境を変更して実行する必要があります。

Rails_ENV=production bundle exec rake assets:precompile

すべてのアセットがプリコンパイルされたら、デフォルト設定に戻り、git add。、commit、Push to heroku

1
user2903934

画像だけを表示するのと同様の問題がありました。 Railsが初めての場合、使用できるかどうかわかりませんでした:

<%= image_tag("fileName.png", alt: "File Name Fancy", size: "100x100")%>

従来のhtmlの代わりに。

Image_tagについては、Rails apiで説明していますが、その使用方法についてはこちらをご覧ください。 http://apidock.com/Rails/ActionView/Helpers/AssetTagHelper/image_tag =

アプリに追加したのは、次のgemのみでした:gem 'Rails_12factor', group: :production

Heroku asset-pipelineドキュメントで説明されているとおり。 https://devcenter.heroku.com/articles/Rails-4-asset-pipeline

1
Jorge Diaz