这是一个非rails应用程序,只是一个简单的ruby脚本,它使用rake等来自动化一些东西。
我的文件夹布局是:
/scripts/Rakefile
/scripts/config/config.yml
/scripts/tasks/*.rake (various rake files with namespaces to organize them)
/scripts/lib/settings.rb
现在我想创建一个Settings类,它将加载config 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
如何传入env,然后从配置中读取scripts_path
等每个方法的正确值?
现在假设每个* .rake文件需要以某种方式引用我的Settings.rb文件(以获取配置相关信息)。我该怎么做?由于我的设置需要config.yml文件的路径,我是否必须在每个rake文件中执行此操作?
更新的 对不起,这不是Rails应用程序,只是一些ruby脚本。
答案 0 :(得分:3)
我会这么做很简单。 您不需要复杂的解决方案。
require 'ostruct'
require 'yaml'
MY_ENV = ENV['ENV'] || 'development'
CONFIG = OpenStruct.new(YAML.load_file("config/config.yml")[MY_ENV])
将其粘贴在rakefile的顶部 和CONFIG将在所有佣金任务中使用。
只需致电CONFIG.scripts_path
答案 1 :(得分:1)
在我的应用程序中,我做了类似的事情。
# config/application.yml
development:
some_variable: a string
production:
some_variable: a different string
然后在application.rb中加载它。
# 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
...
在这种情况下,在环境加载的任何地方我都可以说
MyApp.config.some_variable
要在rake任务中访问此内容,我只需要包含环境
task :something => :environment do
MyApp.config.some_variable
# do something with it
end