Heroku的不编译下滑轨资产管道文件4(Heroku does NOT compile files

2019-07-21 09:42发布

一切顺利的话在本地机器上,在轨道4和Ruby 2.0资产管道。 但部署到Heroku的时候,它表明:

-----> 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中没有任何错误。 我的问题是:

  1. 为什么Heroku的编译资产文件到/ tmp?
  2. 我最后的解决办法是运行RAILS_ENV =产品包的exec耙资产:预编译本地,但是这产生一个清单,xxxxxx.json公共/资产,而不是manifest.yml,使Heroku的不检测JSON清单文件。 我整理出来的手工创建从JSON文件阳明和Heroku上变得快乐。 已经Heroku的做法已经过时了?

Answer 1:

Heroku的资产插件不再起作用,因为轨道4不支持插件。 您需要使用Heroku的资产,而不是宝石。 将此放在您的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。

更新(2013年7月22日):现在的Heroku提供了一个不同的宝石预编译的资产。

group :production do
  gem 'rails_12factor'
end


Answer 2:

您需要配置Rails的服务静态资产生产:配置/环境/ production.rb

SampleApp::Application.configure do
  .
  .
  .
  config.serve_static_assets = true
  .
  .
  .
end

更新:

在Rails 4已被弃用,并已被更改:

config.serve_static_files = true 


Answer 3:

由于轨道4代替manifest.yml与manifest-(指纹)以.json ,你要启用静态资产份量。

从入门在Heroku Rails的4.x版 :

gem 'rails_12factor', group: :production

然后

bundle install

并且,最后,

git push heroku

修正了我的问题。 希望这可以帮助!



Answer 4:

我刚好运行到同样的问题。

我设置config.serve_static_assets = true在我的环境/ production.rb文件,直到Heroku的wont't支持新的清单格式。

所以这是一个暂时的解决方案,直到Heroku的支持将被添加。



Answer 5:

之后谷歌搜索的时间在其中没有在Heroku导游或StackOverflow上帮助过我的意见,我终于遇到了这个博客帖子 ,其提供的这条线索:

heroku labs:enable user-env-compile --app=YOUR_APP

没有这一点,资产管道将始终尝试初始化整个应用程序,并连接到数据库(尽管你可能已经读过,现在轨道4,5不再做这个事情)。 这暴露了你的Heroku的配置Rails的,因此它可以成功地启动和运行像资产耙任务:预编译。



Answer 6:

我需要使用这个宝石:

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 ,除其他事项。



Answer 7:

在我的情况,编制资产按照上述指示,但它不是采摘引导glyphicons“fontawesome-web字体”所以最后浪费了这么多小时后,研究这为我工作。

宝石文件

gem 'rails_12factor', group: :production

束装

配置/ application.rb中

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

环境/ production.rb

config.serve_static_assets = true

于是最后,我跑rake assets:precompile RAILS_ENV=production ,并将其推到的Heroku和工作。



Answer 8:

这与Heroku的红宝石Buildpack的问题,而是一个更新今日(2013年5月21日)部署。 请尝试一下,让我们知道。

要回答你的问题:

#1)这是一个链轮输出; 事情被编译到/tmp ,然后移动(见这里链轮 )。 据我所知,这一直是这样做的方式,但它不是直到链轮的版本是,我们得到了这个新的调试型输出轨更新。

#2)以前assets:precompile genereated一个manifest.json文件,但现在在轨道4清单文件中有一个指纹,这是以前没有检测到。 这是固定的#74 。



Answer 9:

我说这是我css.scss文件中的一个在资产/样式表/文件夹的顶部。

@import "font-awesome";

然后跑..

rake assets:clean

和...

rake assets:precompile RAILS_ENV=production


Answer 10:

在Rails 4.2.4您production.rb有一行:

config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

这意味着, gem 'rails_12factor', group: :production不`吨需要将其更改为真实的,因为它可以通过Heroku的环境变量设置。 你如果删除rails_12factor创业板也将得到一个警告。

如果您有与资产问题 ,登录到控制台的Heroku heroku run rails console ,并找出资产路径文件puts helper.asset_path("application.js")

一个奇怪的行为,我的开发和生产之间发现没有提供的文件结尾时:

用图像/assets/images/image_01.jpg从以下输出asset_paths不同:

发展

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

不必RAILS_ENV=production rake assets:precompile ,Heroku的部署过程中可以实现这个要求。 你也不必预编译的资产开发和他们推到Heroku的。



Answer 11:

除了确保您有“rails_12factor”宝石安装你需要做的唯一事情是这样的。

# config/application.rb

config.assets.paths << Rails.root.join('vendor', 'assets')

如此看来,虽然Rails的确切地知道它想要的,需要的Heroku提醒,包括资产的文件夹的路径资产的一部分。



Answer 12:

添加这种宝石gem 'rails_serve_static_assets'

https://github.com/heroku/rails_serve_static_assets



Answer 13:

如果您使用的控制器特定资产,如:

 <%= javascript_include_tag params[:controller] %> or <%= javascript_include_tag params[:controller] %>

然后在生产中,您将需要显式预编译那些(开发中轨动态编译文件)。

在这里看到官方的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


Answer 14:

我想既然这个问题是从Heroku的支持页面,如果你搜索的链接,我会作为一个答案添加此"assets"

这主要是针对谁正在更新他们的应用程序到Rails 4人,但通过这个打算后-和许多其他SO帖子-什么终于让我改变了在以下production.rb

config.action_dispatch.x_sendfile_header = "X-Sendfile"

至:

config.action_dispatch.x_sendfile_header = nil

我没有抓到这时候我升级和往常一样该带我永远搞清楚。 希望这可以帮助别人! 喊出来PatrickEm谁问/回答他同样的问题 。



Answer 15:

使用图像扩展

我有同样的问题,但出于不同的原因。

代替

<%= asset_path 'facebook-link' %>

使用:

<%= asset_path 'facebook-link.png' %>

虽然第一个本地工作,当我推到我的Heroku图像被打破,我根本不知道这是为什么。 使用固定的问题完整的文件扩展名:)



Answer 16:

这可能不是回答原来的问题的根本原因,但我是有不同的根本原因类似的症状。

的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托管的生产环境中工作。 也许他们有某种配置的。



文章来源: Heroku does NOT compile files under assets pipelines in Rails 4