2012-06-26 9 views
10

Tôi đang cố gắng đảm bảo rằng tôi đang phân phối tệp nén và tệp js bằng cách sử dụng đường dẫn nội dung Rails. Tôi đã thiết lập nó một cách độc đáo và mọi thứ đang chuẩn bị sẵn sàng một cách vui vẻ - và cũng đồng bộ hóa hạnh phúc với S3 nơi tôi đang phục vụ chúng bằng cách sử dụng CloudFront CDN của Amazon.Manifest.yml không được cập nhật với nội dung: biên dịch trước - Đường ray 3.2.6

Tôi đang phục vụ application.css và application.js như vậy:

= stylesheet_link_tag "application" 
= javascript_include_tag "application" 

Vấn đề, trong một nutshell: Các file MD5-hậu tố không đang được đầu ra trong cách bố trí ứng dụng - chỉ raw application.css và application.js

Điều này có một chút lạ: tất cả hình ảnh có tem MD5. Các tệp CSS/JS không.

Dưới đây là production.config tôi:

config.action_controller.perform_caching = true 

    # Specifies the header that your server uses for sending files 
    config.action_dispatch.x_sendfile_header = "X-Sendfile" 
    config.assets.compress = true 
    # Fallback to compile on demand 
    # config.assets.compile = true 
    #config.assets.precompile += %w(application.css application.js) 
    # Generate digests for assets URLs 
    config.assets.digest = true 
    #push the assets to amazon 
    config.action_controller.asset_host = Proc.new { |source, request| 
    if request.ssl? 
     "https://tekpub-assets.s3.amazonaws.com" 
    else 
     "http://tekpub-assets.s3.amazonaws.com" 
    end 
    } 

    config.serve_static_assets = false 

Điều phẩn nộ về toàn bộ quá trình này là tôi có thể thấy gzipped/file tiêu hóa - họ nói đúng có trong thư mục tài sản của tôi. Tất cả các em - các tệp CSS và JS.

Tuy nhiên tập tin manifest.yml tôi chỉ cập nhật như sau:

--- 
application.js: application.js 
application.css: application.css 

Không có lỗi khi tôi chạy tiền biên dịch - trong thực tế tất cả mọi thứ trông khá giống trái đào:

** Invoke assets:precompile:all (first_time) 
** Execute assets:precompile:all 
** Invoke assets:precompile:primary (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
** Invoke environment (first_time) 
** Execute environment 
Resolved collector.newrelic.com to 204.93.223.153 
AssetSync: using /Volumes/Fatty/Sites/tpub6/config/initializers/asset_sync.rb 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:precompile:primary 
** Invoke assets:precompile:nondigest (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
** Invoke environment (first_time) 
** Execute environment 
Resolved collector.newrelic.com to 204.93.223.153 
AssetSync: using /Volumes/Fatty/Sites/tpub6/config/initializers/asset_sync.rb 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:precompile:nondigest 
AssetSync: Syncing. 
Using: Directory Search of /Volumes/Fatty/Sites/tpub6/public/assets 
AssetSync: Done. 

Cảm ơn bạn cho bất kỳ con trỏ/shoves/mẹo.

Trả lời

14

OK, tôi đã tìm thấy câu trả lời: Nếu đường ống nội dung không thể biên dịch một tệp (hoặc loại tệp), nó sẽ không âm thầm, theo kiểu Ruby/Rails.

Trong trường hợp của tôi có 2 vấn đề: có "." trong tên tệp js (bootstrap.min.js) - nó không giống như vậy, mà tôi cho là có ý nghĩa vì nó sử dụng tên tệp để tìm ra cách xử lý tệp (tệp.css.erb, ví dụ).

Loại tiếp theo là loại tệp mà nó không biết phải làm gì. Do một số sự mù lòa và ngu xuẩn với việc di chuyển các tệp tin xung quanh, tôi đã có một tệp YAML đi lạc trong thư mục asset/images của mình. Điều đó đã làm hỏng bộ xử lý làm cho tài sản: biên dịch trước thất bại ... một lần nữa ... âm thầm.

Cách tôi phát hiện ra điều này là tạo một dự án Rails trống và biên dịch tài sản từ đầu. Đó là cách tôi tìm thấy vấn đề tập tin JS cũng như tập tin YAML ngu ngốc.

+1

Vì vấn đề này đã được gây ra do đá quý 'twitter-bootstrap-rails', cập nhật gem từ git repo bằng' gem 'twitter-bootstrap-rails',: git => 'git: // github. com/seyhunak/twitter-bootstrap-rails.git'' đã giải quyết vấn đề này cho tôi. – joseph