Rails 4 and Ruby 2.0。
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
I, [2013-03-12T03:28:29.908234 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/Rails-2ee5a98f26fbf8c6c461127da73c47eb.png
I, [2013-03-12T03:28:29.914096 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/trash-3c3c2861eca3747315d712bcfc182902.png
I, [2013-03-12T03:28:33.963234 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/application-bf2525bd32aa2a7068dbcfaa591b3874.js
I, [2013-03-12T03:28:40.362850 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/application-13374a65f29a3b4cea6f8da2816ce7ff.css
Asset precompilation completed (14.36s)
Herokuはファイルをコンパイルするようですが、エラーなしで/ tmpに入れます。私の質問は:
Rails 4はプラグインをサポートしないため、代わりにHerokuのアセットgemを使用する必要があります。これをGemfileに配置します。
group :production do
gem 'Rails_log_stdout', github: 'heroku/Rails_log_stdout'
gem 'Rails3_serve_static_assets', github: 'heroku/Rails3_serve_static_assets'
end
Herokuのガイド Rails 4。
group :production do
gem 'Rails_12factor'
end
構成する必要がありますRails本番環境で静的アセットを提供するには:config/environments/production.rb
SampleApp :: Application.configure do 。 。 。 config.serve_static_assets = true 。 。 。 終わり
更新:
In Rails 4は非推奨であり、次のように変更されました。
config.serve_static_files = true
Rails 4はmanifest.ymlをmanifest-(fingerprint).json に置き換えたため、静的なアセットサービングを有効にする必要があります。
から Getting Started with Rails 4.x :
gem 'Rails_12factor', group: :production
それから
bundle install
そして最後に、
git Push heroku
私の問題を修正しました。お役に立てれば!
私はまったく同じ問題にぶつかります。
私は、herokuが新しいマニフェスト形式をサポートしなくなるまで、environments/production.rbファイルでconfig.serve_static_assets = trueを設定します。
そのため、herokuのサポートが追加されるまでは一時的なソリューションです。
HerokuのガイドもStackOverFlowの提案も役に立たなかった数時間のグーグル検索の後、私はついに このブログ投稿 に遭遇しました。
heroku labs:enable user-env-compile --app=YOUR_APP
これがないと、アセットパイプラインは常にアプリ全体を初期化してデータベースに接続しようとします(Rails 4はこれを行うようになりました)。 Railsに設定すると、正常に起動し、assets:precompileなどのrakeタスクを実行できます。
このgemを使用する必要がありました。
gem 'Rails_12factor', group: :production #need this for Rails 4 assets on heroku
そして/config/environments/production.rbで以下を設定する必要がありました:
config.assets.compile = true
私の理解では、Rails_12_factor
宝石セットconfig.serve_static_assets = true
、 そのことなど。
私の場合、アセットは上記の手順に従ってコンパイルされましたが、bootstrap glyphicons 'fontawesome-webfont'を選択していなかったため、調査に多くの時間を費やした後、これが最終的に機能しました。
gem 'Rails_12factor', group: :production
バンドルインストール
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif,
"fontawesome-webfont.ttf",
"fontawesome-webfont.eot",
"fontawesome-webfont.svg",
"fontawesome-webfont.woff")
config.assets.precompile << Proc.new do |path|
if path =~ /\.(css|js)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path = Rails.root.join('app', 'assets').to_path
if full_path.starts_with? app_assets_path
puts "including asset: " + full_path
true
else
puts "excluding asset: " + full_path
false
end
else
false
end
end
config.serve_static_assets = true
そして最後に、rake assets:precompile Rails_ENV=production
そしてそれをherokuにプッシュしましたが、うまくいきました。
これはHeroku Ruby Buildpackの問題でしたが、今日(2013-05-21)に更新プログラムが展開されました。試してみてください。
質問に答えるには:
#1)これはスプロケットの出力です。物事は/tmp
を移動しました( ここスプロケット を参照)。私の知る限り、これは常にこの方法で行われていますが、SprocketsのバージョンがRailsで更新されるまで、この新しいデバッグタイプの出力は得られませんでした。
#2)以前はassets:precompile
生成されたmanifest.json
ファイルですが、現在Rails 4にあります。マニフェストファイルにはフィンガープリントがあり、以前は検出されませんでした。これは #74 で修正されました。
In Rails 4.2.4 production.rbには次の行があります。
_config.serve_static_files = ENV['Rails_SERVE_STATIC_FILES'].present?
_
つまり、_gem 'Rails_12factor', group: :production
_は、heroku環境変数で設定できるため、trueに変更する必要はありません。 Rails_12factor gemを削除すると、警告も表示されます。
アセットの問題 がある場合は、herokuコンソール_heroku run Rails console
_にログインし、ファイルputs helper.asset_path("application.js")
のアセットパスを見つけます。
ファイルの終わりが提供されていないときに、開発と本番の間で気づいた奇妙な動作:
イメージ_/assets/images/image_01.jpg
_では、_asset_paths
_ differsからの次の出力:
開発:
_development > puts helper.asset_path('profile_01')
=> /assets/profile_01-bbd16aac5ef1d295411af44c103fcc631ab90ee94957414d4c01c3aed1055714.jpg
development > puts helper.asset_path('profile_01.jpg')
=> /assets/profile_01-bbd16aac5ef1d295411af44c103fcc631ab90ee94957414d4c01c3aed1055714.jpg
_
生産:
_development > puts helper.asset_path('profile_01')
=> /profile_01
development > puts helper.asset_path('profile_01.jpg')
=> /assets/profile_01-bbd16aac5ef1d295411af44c103fcc631ab90ee94957414d4c01c3aed1055714.jpg
_
あなたはnot_Rails_ENV=production rake assets:precompile
_を実行する必要がありますが、herokuはデプロイ中にこれを行います。また、開発中のアセットをプリコンパイルしてherokuにプッシュする必要もありません。
これを、assets/stylesheets /フォルダーのcss.scssファイルの1つに追加しました。
@import "font-awesome";
その後、走った..
rake assets:clean
そして...
rake assets:precompile Rails_ENV=production
この宝石を追加gem 'Rails_serve_static_assets'
「Rails_12factor」gemがインストールされていることを確認することとは別に、必要なことはこれだけです。
# config/application.rb
config.assets.paths << Rails.root.join('vendor', 'assets')
Railsは必要なものを正確に知っていますが、Herokuは、アセットパスの一部としてアセットフォルダを含めることを思い出す必要があるようです。
イメージ拡張機能を使用
私はこれと同じ問題を抱えていましたが、理由は異なります。
代わりに
<%= asset_path 'facebook-link' %>
使用:
<%= asset_path 'facebook-link.png' %>
最初のものはローカルで機能していましたが、Herokuにプッシュしたときにイメージが壊れていたので、理由がわかりませんでした。完全なファイル拡張子を使用すると、問題が修正されました:)
次のようにコントローラー固有の資産を使用している場合:
<%= javascript_include_tag params[:controller] %> or <%= javascript_include_tag params[:controller] %>
次に、本番環境では、それらを明示的にプリコンパイルする必要があります(開発中はRails実行中にファイルをコンパイルします)。
公式Railsこちらのガイド: http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets をご覧ください。
ガイドで説明されているようにプリコンパイルするには(こちら: http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets )、config/application.rbに次を追加する必要があります。
# config/application.rb
config.assets.precompile << Proc.new do |path|
if path =~ /\.(css|js)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path = Rails.root.join('app', 'assets').to_path
if full_path.starts_with? app_assets_path
puts "including asset: " + full_path
true
else
puts "excluding asset: " + full_path
false
end
else
false
end
end
この質問は、"assets"
。
これは主に、アプリをRails 4に更新しているが、これを通過した後-および他の多くのSO投稿-最終的に私が得たものは変わっていたproduction.rb
:
config.action_dispatch.x_sendfile_header = "X-Sendfile"
に:
config.action_dispatch.x_sendfile_header = nil
アップグレードしたとき、私はこれを捕らえていませんでしたが、いつものように、これを理解するのに永遠にかかりました。うまくいけば、それは他の誰かを助ける! PatrickEm に 質問 で同じ質問/回答をした人に叫ぶ。
これは元の質問の根本原因に答えない場合がありますが、別の根本原因で同様の症状がありました。
JPEGファイルをプリコンパイルすると、ファイル拡張子がJPGに変更されます。つまり、asset_path("my_image.jpeg")
およびasset_path("my_image")
は機能しませんでした。 JPEGから「e」を削除して、出来上がり。
他の人がここで同じ問題を説明しています https://blazarblogs.wordpress.com/2016/04/06/Rails-force-to-precompile-jpeg-to-jpg/
これはバグですか?または望ましい行動ですか?また、Herokuがホストする本番環境でしか機能しないことも奇妙です。たぶん、彼らは何らかの構成を持っています。