2

这是一个非 Rails 应用程序,只是一个简单的 ruby​​ 脚本,它使用 rake 等来自动化一些事情。

我的文件夹布局是这样的:

/scripts/Rakefile
/scripts/config/config.yml
/scripts/tasks/*.rake (various rake files with namespaces to organize them)
/scripts/lib/settings.rb

现在我想创建一个设置类来加载配置 yaml 文件,然后公开 yaml 文件内容的属性/方法。

yaml 文件具有用于开发和生产的单独部分。

development:
    scripts_path: '/dev/mygit/app1/scripts/'
production:
    scripts_path: '/var/lib/app1/scripts/'

到目前为止,我的 rakefile 看起来像:

$LOAD_PATH.unshift File.expand_path('..', __FILE__)

#imports
require 'fileutils'
require 'rubygems'
require 'active_record'
require 'yaml'
require 'logger'

require 'ar/models'
require 'lib/app1'

env = ENV['ENV'] || 'development'
config = YAML::load(File.open('config/config.yml'))[env]

Dir.glob('tasks/*.rake').each { |r| import r }

我需要有关 Settings.rb 文件的帮助,对吗?

module App1
  class Settings
    def initialize(config_path, env)
      config = YAML.load(File.open(config_path))
    end

    def scripts_path
    end

  end
end

如何传入环境,然后从配置中为每种方法读取正确的值,例如scripts_path等?

现在假设每个 *.rake 文件都需要以某种方式引用我的 Settings.rb 文件(以获取配置相关信息)。我该怎么做?由于我的设置需要 config.yml 文件的路径,我是否必须在每个 rake 文件中执行此操作?

更新 对不起,这不是 Rails 应用程序,只是一些 ruby​​ 脚本。

4

2 回答 2

3

我会做的很简单。您不需要复杂的解决方案。

require 'ostruct'
require 'yaml'

MY_ENV = ENV['ENV'] || 'development'
CONFIG = OpenStruct.new(YAML.load_file("config/config.yml")[MY_ENV])

把它放在你的 rakefile 的顶部,CONFIG 将在所有 rake 任务中可用。

打电话CONFIG.scripts_path

于 2012-04-24T09:15:20.773 回答
1

Inside my applications I do something of this sort.

# config/application.yml

development:
  some_variable: a string

production:
  some_variable: a different string

Then in application.rb I load it up.

# config/application.rb

module MyApp

  def self.config
    @config ||= OpenStruct.new(YAML.load_file("config/application.yml")[Rails.env.to_s])
  end

  class Application < Rails::Application
    ...

In this case, anywhere the environment is loaded I can say

MyApp.config.some_variable

To get access to this inside a rake task, I just need to include environment

task :something => :environment do
  MyApp.config.some_variable
  # do something with it
end
于 2012-04-23T17:12:31.830 回答