2009-03-01 14 views
5

tôi cố gắng để có được Haml làm việc mà không có đá quý với Sinatra (Heroku không cho phép gem install, như xa như tôi biết)Làm thế nào để sử dụng haml với heroku?

Những gì tôi đã làm như vậy cho đến nay:

  • bản sao các Haml repo git bên trong dự án của tôi

  • add: require 'Haml/lib/haml.rb' để tập tin chính Sinatra tôi

các công việc sau:

get '/test' do 
    Haml::Engine.new('%p test').render 
end 

nhưng sau không:

get '/test2' do 
    haml :my_template 
end 

tôi nhận được lỗi:

NoMethodError - Phương pháp xác định each' for nil:NilClass (haml):20:in làm'

./haml/lib/haml/engine .rb: 152: trong `render '

./haml/lib/haml/engine.rb:152:in` instance_eval'

./haml/lib/haml/engine.rb:152:in 'làm' ...

Có bất kỳ tập tin khác để yêu cầu? Bất kỳ ý tưởng nào?

Trả lời

11

Heroku hỗ trợ cài đặt đá quý bằng cách tạo tệp .gems trong thư mục gốc của dự án và thêm nó vào Git. Trên đẩy tiếp theo của bạn đá quý cần thiết trong đó sẽ được cài đặt. Để cài đặt Haml file sẽ chứa dòng này:

haml --version '>= 2.2.0' 

Thông tin thêm có thể được tìm thấy ở đây: http://docs.heroku.com/gems

+1

** CẢNH BÁO! ** Bundler là cách tốt nhất để quản lý đá quý của bạn. Chúng tôi đề xuất tất cả các ứng dụng trên Heroku sử dụng Bundler. ** Biểu thức .gems không được chấp nhận. ** –

+0

@StuFFmc Tôi có đá quý haml trong gemspec và gemfile tham chiếu gemspec của tôi. Tôi đã kiểm tra trong tập tin khóa của tôi và nó chắc chắn là có. Nhật ký của tôi nói rằng haml không thể được tìm thấy. Có vấn đề gì? Heroku không hỗ trợ gemspecs? Như một lưu ý, tôi có thể thực hiện nó với bundler cục bộ bằng cách sử dụng lệnh khởi động mặc định mà heroku sử dụng. – nterry

+0

@nterry Tôi đã không thực hiện bất kỳ Rails nào sau hơn 2 năm :(Tôi e rằng tôi không thể thực sự giúp ngay bây giờ ... Tôi có thể làm một số Rails trong tương lai một lần nữa, nhưng bây giờ tôi hoàn toàn với Apple Kỹ thuật bận rộn. –

2

Hai khả năng rõ ràng nhất (theo thứ tự xác suất):

  1. Có một lỗi trong một số mã Ruby trong tập tin Haml của bạn. Nếu bạn có thể thử cùng một mã bên ngoài Sinatra, nó có hiển thị OK ở đó không?
  2. Tệp my_template.haml không có hoặc không đúng tên.
+0

cảm ơn, tôi đã có @ results.each nơi @results là nil trong tập tin haml của tôi –

2

Như Stuff mc đã chỉ ra, để đáp ứng với câu trả lời petergassner của, cách chính xác để làm điều này bây giờ là sử dụng Gemfile của ứng dụng của bạn. Trong Gemfile bạn sẽ làm

gem "haml", ">= 2.2.0" 

Heroku biết khi bạn đẩy ứng dụng để cài đặt đá quý được đề cập trong gemfile của bạn.

Lưu ý rằng nếu bạn muốn sử dụng sass cũng như haml, bạn có thể cần phải nhảy qua một vài vòng để thiết lập. Cách haml được sử dụng để làm việc theo truyền thống liên quan đến việc ghi các tệp css được biên dịch vào đĩa, đây là vấn đề trên hệ thống tệp chỉ đọc của heroku. Ai đó cuối cùng đã viết một plugin/đá quý để giải quyết tình trạng này (sass-on-herku hoặc một số như vậy).

Hiện tại, đá quý haml-rails dường như quan tâm đến việc này bằng cách sử dụng đường ống nội dung, nhưng nếu bạn đang sử dụng Sinatra, điều này có thể sẽ không hiệu quả với bạn. Vì vậy, bạn sẽ muốn xem liệu một trong những viên đá quý đó có còn hoạt động hay không, hoặc có lời khuyên rằng heroku dường như là currently be espousing. Bài viết này cũng là đường ray cụ thể, nhưng bạn sẽ có thể làm cho mọi thứ hoạt động phù hợp với Sinatra mà không gặp khó khăn quá nhiều. (Về cơ bản, để tóm tắt điểm ở đây, heroku hiện hỗ trợ ghi vào thư mục tmp, miễn là bạn có thể cấu hình cả đá quý sass và ứng dụng Sinatra để sử dụng vị trí tmp nào đó cho điều này, bạn nên làm tốt.)