2008-09-21 23 views
6

Tôi cần phải lưu trữ cấu hình ứng dụng cụ thể trong đường ray. Nhưng nó phải là:Cách tốt nhất để lưu trữ cấu hình ứng dụng cụ thể trong đường ray là gì?

  • thể truy cập vào bất kỳ tập tin (mô hình, xem, những người giúp đỡ và điều khiển
  • môi trường nào đó (hoặc không), có nghĩa là mỗi môi trường có thể ghi đè lên configs quy định tại environment.rb

tôi đã cố gắng sử dụng environment.rb và đặt một cái gì đó giống như

USE_USER_APP = true 

mà làm việc với tôi nhưng khi cố gắng ghi đè lên nó trong một môi trường cụ thể nó sẽ không làm việc bec ause production.rb, ví dụ, dường như nằm bên trong khối Rails: Initializer.run.

Vì vậy, bất kỳ ai?

Trả lời

4

Tôi đã giúp một người bạn thiết lập the solution mentioned by Ricardo hôm qua. Chúng tôi bị hack nó một chút bằng cách load file YAML với một cái gì đó tương tự như sau (đi từ bộ nhớ ở đây):

require 'ostruct' 
require 'yaml' 
require 'erb' 
#config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml")) 
config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result)) 
env_config = config.send(RAILS_ENV) 
config.common.update(env_config) unless env_config.nil? 
::AppConfig = OpenStruct.new(config.common) 

này cho phép ông để nhúng mã Ruby trong cấu hình, như trong Rhtml:

development: 
    path_to_something: <%= RAILS_ROOT %>/config/something.yml 
0

Tôi tìm thấy một cách tốt here

4

Điều cơ bản nhất cần làm là đặt biến lớp từ môi trường của bạn.rb. Tôi đã làm điều này cho Google Analytics. Về cơ bản tôi muốn có một khóa khác tùy thuộc vào môi trường mà tôi đang phát triển hoặc dàn dựng không làm lệch số liệu.

Đây là cách tôi đã làm.

Trong lib/analytics/google_analytics.rb:

module Analytics 
    class GoogleAnalytics 
    @@account_id = nil 

    cattr_accessor :account_id 
    end 
end 

Và sau đó trong environment.rb hoặc trong environments/production.rb hoặc bất kỳ tập tin môi trường khác:

Analytics::GoogleAnalytics.account_id = "xxxxxxxxx" 

Sau đó, bất cứ nơi nào bạn định nghĩa để tham khảo, nói cách bố trí mặc định với Google JavaScript Analytics, bạn chỉ cần gọi Analytics::GoogleAnalytics.account_id.

0

Sử dụng biến môi trường. Heroku sử dụng nó. Hãy nhớ rằng nếu bạn giữ cấu hình trong codebase, bất kỳ ai có quyền truy cập vào mã đều có quyền truy cập vào bất kỳ cấu hình bí mật nào (các khóa api aws, các khóa api cổng, vv).

envdir của daemontool là một công cụ tốt để thiết lập cấu hình, tôi khá chắc chắn đó là những gì Heroku sử dụng để cung cấp cho ứng dụng biến môi trường của họ.

0

Tôi đã sử dụng Rails Settings Cached.

Rất dễ sử dụng, giữ giá trị cấu hình của bạn được lưu trong bộ nhớ cache và cho phép bạn thay đổi chúng một cách linh hoạt.

+0

Vâng, tôi nghĩ đá quý này hữu ích cho việc lưu trữ các cài đặt đơn giản. – Jiemurat

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