2013-01-18 25 views
15

Tôi đang sử dụng Sinatra với Apache và Phusion-hành khách với phong cách "cổ điển":sinatra config.ru: khối cấu hình là gì?

# config.ru 
require 'sinatra' 

configure do 
    .... 
end 

require './app' 

run Sinatra::Application 

Tôi muốn xác định một số điều. Sự khác biệt giữa việc xác định nó bên trong khối cấu hình hoặc bên ngoài là gì?

# config.ru 
require 'sinatra' 

# A) Defining logger here 
rack = File.new("logs/rack.log", "a+") 
use Rack::CommonLogger, rack 

# B) Global variables here 
LOGGER = Logger.new(...) 

# C) Gem configuration here 
DataMapper::Property::Boolean.allow_nil(false) 

configure do 
    # A) Or defining logger here? 
    rack = File.new("logs/rack.log", "a+") 
    use Rack::CommonLogger, rack 

    # B) Or global variables here? 
    LOGGER = Logger.new(...) 

    # C) Or gem configuration here? 
    DataMapper::Property::Boolean.allow_nil(false) 
    .... 
end 

require './app' 

run Sinatra::Application 

Có một số quy tắc chung nên làm bên ngoài và những gì nên được thực hiện bên trong? Sự khác biệt là gì? Tôi đã thử nghiệm cả hai biến thể, và cả hai dường như làm việc tốt như nhau.

Tôi biết configure có thể được sử dụng để phản ứng về môi trường như thế này:

configure :development do 
    .... 
end 

Vì vậy, nó rất hữu ích cho các cấu hình môi trường khác nhau. Trường hợp sử dụng này rõ ràng, nhưng về cấu hình chung cho mọi môi trường thì sao? Tôi đặt chúng ở đâu? Đây có phải chỉ là vấn đề về phong cách?

Trả lời

9

Đây là nơi đầu tiên là vấn đề môi trường và ở vị trí thứ hai là vấn đề về phong cách. Không có sự khác biệt khi bạn đặt cấu hình của mình.

Nó làm cho mã của bạn dễ đọc hơn nhiều (IMHO) nếu bạn đặt nó thành một khối. Ngoài ra nó sẽ cho phép bạn thêm các tùy chọn dựa trên môi trường mà sau đó bạn đưa vào các khối tương ứng của riêng chúng.

Nói tóm lại, đó là tùy thuộc vào bạn :)

+2

Tôi chỉ tìm thấy [nguồn] (http://rubydoc.info/gems/sinatra/1.3.3/Sinatra/Base.configure), và nó thực sự không có gì hơn là tạo ra khối với chính nó như một đối số. Vì vậy, nó chỉ là vấn đề về phong cách. – Markus

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