7

我之前多次使用過asset_sync gem,並取得了巨大成功,但在Rails 4.0.3項目中使用它似乎導致了一個問題。Rails 4.0.3使用asset_sync生成不正確的資產路徑

資產上傳,散列和gzip到目標目錄(我剛剛使用默認的「資產」),但是在登臺/生產環境中運行應用程序時,路徑不正確。

他們採取的形式:

S3_DOMAIN.com/stylesheets/application.css 

相反的:

S3_DOMAIN.com/assets/application-HASH.css 

有其他人遇到這個問題?我發現顛倒這種行爲的唯一方法是將config.assets.compile設置爲true,但這不適用於生產環境。

下面是相關的配置文件:

## environments/staging.rb 
    config.serve_static_assets = false 
    config.assets.compress = true 
    config.assets.js_compressor = :uglifier 
    config.assets.css_compressor = :sass 
    # Have to set this to true to make asset_sync generate the correct links 
    config.assets.compile = false 
    config.assets.digest = true 
    config.assets.enabled = true 
    config.assets.initialize_on_precompile = true 
    config.action_controller.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com" 
    config.action_mailer.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com" 
    config.assets.prefix = "/assets" 
    config.assets.debug = false 
    config.assets.cache_store = :memory_store 

##config/asset_sync.yml 
defaults: &defaults 
    fog_provider: 'AWS' 
    aws_access_key_id: "<%= ENV['AWS_ACCESS_KEY_ID'] %>" 
    aws_secret_access_key: "<%= ENV['AWS_SECRET_ACCESS_KEY'] %>" 
    # To use AWS reduced redundancy storage. 
    # aws_reduced_redundancy: true 
    # You may need to specify what region your storage bucket is in 
    fog_region: <%= ENV['FOG_REGION'] %> 
    existing_remote_files: keep 
    # To delete existing remote files. 
    # existing_remote_files: delete 
    # Automatically replace files with their equivalent gzip compressed version 
    gzip_compression: true 
    # Fail silently. Useful for environments such as Heroku 
    # fail_silently: true 

development: 
    <<: *defaults 
    enabled: false 

test: 
    <<: *defaults 
    enabled: false 

staging: 
    <<: *defaults 
    fog_directory: <%= ENV['FOG_DIRECTORY'] %> 

production: 
    <<: *defaults 
    fog_directory: <%= ENV['FOG_DIRECTORY'] %> 
+0

我也遇到類似的問題,在我的生產環境中......希望這個問題很快得到解決 –

+0

我也有同樣的問題......你有沒有想過? –

回答

0

你需要運行在軌道4

例如production模式相關的一切資產:如果你運行它

rake assets:precompile RAILS_ENV=production 

在默認模式下(開發)哈希將是不同的,所以軌道一起離開哈希。

此外,您需要在啓動服務器之前執行此操作,以便找到這些文件。

注意:我認爲這個更改是爲了讓您在開發中緩存資產。

0

希望這可以幫助我的同行程序員朋友省下一些敲打的時間:D。我已經在「digest_path & asset_digest_path not allowing digest URLs」上回答了這個問題,但會在此處重新發布,因此可以節省一些點擊次數。

我上傳文件到S3,我沒有意識到清單沒有被Rails加載。你可以擁有所有的生產設置(如上圖和其他線程),但是如果你沒有Rails可讀的manifest.json文件,它仍然會生成/ javascript/*(example)url。

我還是遇到了multi_json gem的最新版本問題,所以我把它降級到了1.7.8,它工作的很好。

gem 'multi_json', '1.7.8' 

這是如此它可以讀取manifest.json文件,該文件rake assets:precompile創建。

有這個辯論鏈輪線程https://github.com/rails/sprockets-rails/issues/107你的清單文件是否應該在git的或只是一個部署腳本,做最適合你,只要確定它是容易找到:

/public/assets/manifest.json 

或者用它自己來描述它

config.assets.manifest = '...' 

這可以或不可以被剝奪。

乾杯!

相關問題