2012-01-11 24 views
13

Tôi vừa triển khai lần đầu cho một ứng dụng Rails 3.1 mới, nhưng các tài sản dường như không hoạt động chính xác. Tôi đang biên dịch trước mọi thứ khi triển khai và nó sẽ xuất hiện trong public/assets như mong đợi. Tuy nhiên, đầu ra của ví dụ stylesheet_link_tag "application" trong bố cục của tôi có một href trỏ đến /stylesheets/application.css. Điều này rõ ràng không hoạt động.Tại sao stylesheet_link_tag không liên kết đến/nội dung trong sản xuất?

Điều kỳ lạ là ở chế độ phát triển mọi thứ có vẻ ổn, nó liên kết tới /assets/application.css như mong đợi.

Tôi đã so sánh các tệp config/application.rbconfig/environments/production.rb của mình với một ứng dụng khác mà chúng tôi có trên đường dẫn nội dung và các cài đặt có liên quan dường như giống nhau.

Tôi nên tìm ở đâu?

+1

Bạn có chắc chắn rằng application.css trong hợp nhất sản xuất có tất cả css bạn đã sử dụng trong quá trình phát triển hay không. Mở tệp và kiểm tra kiểu bị thiếu trong ứng dụng.css – naren

+0

Đúng, tồn tại và chứa mọi thứ tôi mong đợi, chỉ với ít khoảng trắng hơn. –

Trả lời

14

Khi helper tạo mã này:.

/stylesheets/application.css 

Điều này là do đường ống không được kích hoạt trong chế độ bất cứ điều gì bạn đang ở trong Có một số lý do có thể.

  • Bạn đã bật đường dẫn trong tệp cấu hình sai. (Đường dẫn phải được bật trong tệp cấu hình application.rb)

  • Bạn đã bật tính năng này trong ứng dụng.rb và tắt ở một nơi khác.

  • Bạn đã vô tình nhận xét ra một railtie đâu đó

Xem this question để biết chi tiết.

Nếu đây là ứng dụng được nâng cấp, hãy kiểm tra tất cả các tùy chọn cấu hình trong hướng dẫn đường dẫn để đảm bảo rằng bạn đã cài đặt chính xác tất cả các tùy chọn cấu hình.

+6

chỉ cho tôi đi đúng hướng. Tôi đã không yêu cầu tất cả các Rails (ứng dụng chỉ mongodb), và đã thiếu một sprockets 'yêu cầu '/ railtie" '. Vẫn không chắc tại sao điều này không quan trọng trong phát triển. –

+0

vui lòng cho tôi biết thêm về cách bạn khắc phục sự cố này? Tôi gặp vấn đề tương tự sau khi nâng cấp từ 3.x. –

+0

Trong trường hợp của tôi trên Rails 4.0, vấn đề là tôi đã cung cấp cho người trợ giúp đường dẫn sai. Cung cấp cho đúng giá trị được sử dụng/tài sản thay vì/tệp định kiểu – redtree

1

Tôi khuyên bạn nên bật config.assets.compile = false (theo mặc định) thành true trong production.rd và xem nội dung được phân phối như trong developemnt. Nếu họ được phục vụ một cách chính xác thì bạn nên kiểm tra application.css của bạn để xem nếu bạn đã bao gồm stylesheets khác trong thư mục đúng giống như có file css

/* 
*= require scaffold 
*= require pagination 
*= require_self 
*= require_tree. 
*/ 

nơi giàn giáo và pagination là file css. hoặc đề cập đến chúng dưới cờ config.assets.precompile như dưới đây.

config.assets.precompile + =% w (pagination.css scaffold.css)

tôi giả lý do là công trình tiền biên dịch (application.js, application.css, và tất cả các phi JS/CSS đã được thêm vào) và bất kỳ nội dung bổ trợ nào sẽ được thêm vào cờ config.assets.precompile.

+0

Tôi đã bật biên dịch, nhưng điều đó không tạo nên sự khác biệt. Tôi cũng bật 'config.assets.debug = true', nhưng điều đó cũng không thay đổi gì cả. Tệp 'public/assets/manifest.yml' tồn tại và chứa một mục' application.css: application-642da156f9df61facf341073150aa860.css' và tệp đó tồn tại. –

+0

Bạn đã nói rằng trong chế độ phát triển mọi thứ hoạt động tốt và chuyển config.assets.compile = true phải giống nhau. Bạn có thể đăng ý chính của chế độ thừa kế của bạn trong thư mục app/asset – naren

-1

Tôi nghĩ rằng nội dung được cho là ở app/assets không phải public/assets tuy nhiên tôi có thể bị nhầm lẫn.

+2

Trong sản xuất, tài sản sẽ được phân phát từ thư mục publci/assets để chúng tôi cần biên dịch trước các tài sản để chuyển từ ứng dụng/tài sản (v.v.) sang publc/asset – naren

7

Tôi biết điều này là dành cho đường ray 3.1 nhưng một lỗi rất giống nhau có thể xảy ra với người dùng đường ray 4 để đảm bảo tính toàn vẹn và giúp các nhà cung cấp trong tương lai. Nguyên nhân có thể xảy ra nhất là bạn đã không thêm nội dung đó vào chỉ thị biên dịch trước trong sản xuất.rb, nó trông như thế này:

# Precompile additional assets. 
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. 
config.assets.precompile += %w() 

Như OP nói, application.css đã không được bổ sung và các triệu chứng là url bắt đầu bằng/stylesheets hay/Javascripts và không tài sản. Vì vậy, giải pháp là để

config.assets.precompile += %w(your_assets.css your_assets.js) 
Các vấn đề liên quan