rails说资产没有预先编译但是它们是! + S3

时间:2014-01-17 19:00:16

标签: ruby-on-rails ruby-on-rails-3 amazon-s3 asset-pipeline

我有一个使用Amazon S3托管资产的Rails 3.2应用程序。我正在使用capistrano将其部署到Digital Ocean。以下是配方的资产部分:

task :precompile_assets, roles: :wrk do    
  run "cd #{release_path}; RAILS_ENV=production bundle exec rake assets:precompile"
end

task :sync_assets, roles: :wrk do   
  run "cd #{release_path}; RAILS_ENV=production bundle exec rake sync:assets"
end

同步任务:

namespace :sync do
  desc "sync methods"

  task assets: :environment do  

    ################
    # sync with s3 #
    ################

    puts "Synchronizing public/assets/* with s3://#{AWS_CONFIG['bucket']}/assets/"
    system("s3cmd sync -P public/assets/* s3://#{AWS_CONFIG['bucket']}/assets/")

  end
end

这是我的produ.rb:

config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.assets.enabled = true
config.assets.initialize_on_precompile = true
config.action_controller.asset_host = "//#{AWS_CONFIG['bucket']}.s3.amazonaws.com"
config.assets.version = '1.0'

部署完美无瑕,资产预编译并发送到S3,我可以在我的桶中看到它们,我可以在Chrome中浏览它们。但是我访问的任何页面都会得到ActionView::Template::Error (anyfile isn't precompiled)

任何文件......图像,CSS,JS等都会发生这种情况。

更新

刚刚发现Rails.configuration.assets.digests在生产中返回nil。也许问题存在,由于某种原因,链轮没有找到manifest.yml。

我可能错了,但看起来sprockets在查找manifest.yml时没有在config中使用assets_host。

https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/railtie.rb#L38

更新2

我只复制了来自S3的manifest.yml并将其放在public / assets中,错误消失了。

0 个答案:

没有答案