2014-04-15 14 views
11

Ứng dụng đường ray của tôi trong chế độ dev hoạt động và trông chính xác như tôi muốn, nhưng trong sản xuất có vẻ khác nhau trên chrome và safari, trong safari các hình ảnh logo tải nhưng không phải là phông chữ , trong chrome tải phông chữ nhưng không phải hình ảnh cộng với các trường nhập lâu hơn một chút và được căn chỉnh sai trong chrome nhưng ở chế độ dev, tất cả đều trông tuyệt vời trong chromeRails tài sản không biên dịch trước, css trông khác nhau trong sản xuất

Tôi đã rối tung điều này một lúc và xóa công khai/asset một vài lần a đã làm

rake assets:precompile RAILS_ENV=production 

không thành công, phần biên dịch đi qua không có lỗi

config/application.rb:

# Settings in config/environments/* take precedence over those specified here. 
# Application configuration should go into files in config/initializers 
# -- all .rb files in that directory are automatically loaded. 
config.assets.paths << "#{Rails.root}/assets/fonts" 
config.assets.paths << "#{Rails.root}/assets/images" 
config.assets.paths << Rails.root.join("app", "assets", "fonts") 
config.assets.precompile += %w(.svg .eot .woff .ttf) 


# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 
# config.time_zone = 'Central Time (US & Canada)' 

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 
# config.i18n.default_locale = :de 
config.assets.enabled = true 
#config.assets.paths << "#{Rails.root}/app/assets/fonts" 

config/môi trường/sản xuất:

# Code is not reloaded between requests. 
config.cache_classes = true 

# Eager load code on boot. This eager loads most of Rails and 
# your application in memory, allowing both thread web servers 
# and those relying on copy on write to perform better. 
# Rake tasks automatically ignore this option for performance. 
config.eager_load = true 

# Full error reports are disabled and caching is turned on. 
config.consider_all_requests_local  = false 
config.action_controller.perform_caching = true 

# Enable Rack::Cache to put a simple HTTP cache in front of your application 
# Add `rack-cache` to your Gemfile before enabling this. 
# For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. 
# config.action_dispatch.rack_cache = true 

# Disable Rails's static asset server (Apache or nginx will already do this). 
config.serve_static_assets = true 
#config.assets.compile = true 

config.assets.precompile = ['*.js', '*.css', '*.css.erb', '*.css.scss'] 
# Compress JavaScripts and CSS. 
config.assets.js_compressor = :uglifier 
# config.assets.css_compressor = :sass 
config.assets.paths << "#{Rails.root}/assets/fonts" 
config.assets.paths << "#{Rails.root}/assets/images" 
config.assets.precompile += %w(.svg .eot .woff .ttf) 
config.assets.paths << Rails.root.join('app', 'assets', 'fonts') 
# Do not fallback to assets pipeline if a precompiled asset is missed. 
config.assets.compile = false 
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/ 
# Generate digests for assets URLs. 
config.assets.digest = true 

# Version of your assets, change this if you want to expire all your assets. 
config.assets.version = '1.0' 
+1

Môi trường sản xuất của bạn là gì? Bạn đang triển khai đến Heroku? – winston

+0

không, tôi đang sử dụng hộp của riêng mình trên Nitrous.IO chạy trên puma – franklinexpress

+1

Bạn có đang chạy nginx không? Bạn có thể cần phải đặt cấu hình.serve_static_assets thành false trong cấu hình sản xuất của bạn. Ngoài ra, bạn có thể vui lòng đăng mã cho biểu trưng và liên kết CSS của mình không? – winston

Trả lời

11

Trong file config/environments/production.rb của bạn, hãy đặt:

config.serve_static_assets = false(hiện nó thiết lập là true)

config.assets.compile = true(hiện được đặt thành false)

Điều này sẽ giải quyết được sự cố của bạn.

Hãy để tôi giải thích những gì tôi yêu cầu bạn làm.

  • Bằng cách đặt config.serve_static_assets = false, chúng tôi đang nói với đường ray máy chủ, không thêm ActionDispatch::Static middleware, được sử dụng để phục vụ tài sản tĩnh.

Tại sao không? Đó là vì trong môi trường sản xuất, bạn phải chạy máy chủ ứng dụng (như puma) phía sau máy chủ web (như Apache/Nginx), được thiết kế để phục vụ tệp tĩnh (bao gồm cả nội dung) trực tiếp mà không cần gửi yêu cầu để quản lý máy chủ ứng dụng.

Vì bạn không sử dụng bất kỳ máy chủ web nào, chúng tôi sẽ tắt nó đi.

  • Bằng cách đặt config.assets.compile = true, chúng tôi đang yêu cầu biên dịch để biên dịch nội dung được yêu cầu khi chạy. ví dụ: Tìm nội dung được yêu cầu trong app/assets, vendor/assets, lib/assets và phân phát nội dung đó nếu tìm thấy từ bất kỳ vị trí nào trong số này.

Theo mặc định, config.assets.compiletrue đang phát triển, false trong môi trường sản xuất. Vì, chúng tôi không sử dụng máy chủ web để phân phát nội dung tĩnh, chúng tôi đang yêu cầu các đường dẫn biên dịch trực tiếp tài sản của chúng tôi.

Để biết thêm chi tiết, tham khảo asset pipeline documentation.

+0

'config.assets.compile = true' là kicker cho tôi. Đôi khi các nhận xét đi kèm với cài đặt không thực sự làm sáng tỏ tác động của nó. Điều này thực sự giống như nói cho đường ray để mong đợi tài sản biên dịch, không thực sự là đường ray _itself_ nên biên dịch chúng. – Volte

Các vấn đề liên quan