2

これは非レールアプリであり、rakeなどを使用していくつかのことを自動化する単純なrubyスクリプトです。

私のフォルダレイアウトは次のとおりです。

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

次に、config yamlファイルをロードするSettingsクラスを作成し、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_pathetcなどの各メソッドの構成から正しい値を読み取ることができますか?

ここで、各* .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 の先頭に追加すると、すべての rake タスクで CONFIG が利用できるようになります。

電話するだけCONFIG.scripts_path

于 2012-04-24T09:15:20.773 に答える
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
于 2012-04-23T17:12:31.830 に答える