1

私は最初の Rails プラグインを作成しようとしていますが、それを構成可能にしたい、つまり、environment.rb ファイルなどで変数を設定できるようにしたいと考えています。

更新: ここで行われているようなことをしようとしています: http://soakedandsoaped.com/articles/read/exception-notifier-ruby-on-rails-plugin。私は彼らのコードを模倣しようとしましたが、うまくいきません。

ハードコードされた値でプラグインを動作させていますが、これまでに構成可能にするために試みたすべてのことはうまくいきませんでした。

コードの一部を次に示します。

#vendor/plugin/markup/lib/markup_helper.rb
module MarkupHelper
    def stylesheet_cache_link_tag(*sources)
      cache = assests_cache_dir ? assests_cache_dir : ""
      options = sources.extract_options!.stringify_keys
      cached_name = options.delete("cached_name")
      stylesheet_link_tag(sources, :cache=> File.join(cache, cached_name))
    end

    def javascript_cache_include_tag(*sources)
      cache = assests_cache_dir ? assests_cache_dir : ""
      options = sources.extract_options!.stringify_keys
      cached_name = options.delete("cached_name")
      javascript_include_tag(sources, :cache=> File.join(cache, cached_name))
    end
end

#something like the following in config/environment.rb or probably config/environments/production.rb
MarkupConfig.assests_cache_dir = "cache"

assests_cache_dir をデフォルトで「キャッシュ」に設定したいのですが、環境設定ファイルで設定できるようにします。私はこれについて長い間グーグルで検索してきましたが、これについて議論しているものは見つかりません。どうすればこれを達成できますか?

4

2 に答える 2

3
module MarkupHelper
  mattr_accessor :assets_cache_dir
  self.assets_cache_dir = "cache"

  def assets_cache_dir
    MarkupHelper.assets_cache_dir
  end
end

次に、environment.rb (環境ごとに異なる値が必要な場合は development.rb/test.rb/production.rb) で:

MarkupHelper.assets_cache_dir = "my-value"
于 2009-06-02T18:45:54.633 に答える
1

tomafroで使用されるアプローチは非常に使いやすいですが、別のアプローチは、環境に応じて分割できるdatabase.ymlスタイルの構成ファイルを使用することです。

モジュールMyPlugin
  クラス構成
    #==定数============================================== ============

    CONFIG_FILES = [
      "#{RAILS_ROOT} /config/myplugin.yml"、
      "#{RAILS_ROOT} /config/myplugin.yaml"
    ]。氷結

    DEFAULT_CONFIGURATION = {
      :url => DEFAULT_HOSTNAME
    }。氷結

    #==クラスメソッド============================================= =========

    #:nodoc:
    def self.config_file_found
      CONFIG_FILES.find do | path |
        File.exist?(パス)
      終わり
    終わり

    #構成ファイルへのデフォルトパスを返します
    def self.default_path
      config_file_foundまたはCONFIG_FILES.first
    終わり

    #==インスタンスメソッド============================================= ======

    #から読み取ることにより、新しいMyPlugin::Configurationインスタンスを作成します
    #構成ファイル。
    #+env+ロードするRails環境
    def initialize(env)
      config_file = self.class.config_file_found

      @env_config = DEFAULT_CONFIGURATION

      if(@config =(config_file and YAML.load(File.open(config_file))))
        [@config ['defaults']、@config [env]] .each do | options |
          if(オプション)
            @env_config = @ env_config.merge(options.symbolize_keys)
          終わり
        終わり
      終わり
    終わり

    #構成ファイルが見つかってロードされた場合は+ true +を返します、または
    #+false+それ以外の場合。
    defは存在しますか?
      @env_config!= DEFAULT_CONFIGURATION
    終わり

    #特定の構成オプションを返します。
    def [](key)
      @env_config [key.to_sym]
    終わり
  終わり

  def self.config
    @config || = Configuration.new(Rails.env)
  終わり
終わり

これを次のように使用します。

settting = MyPlugin.config [:param_name]

特定の値をフェッチするユーティリティメソッドを記述したり、構成ハッシュの代わりにOpenStructを使用したりすることもできます。これは、別のデザインパターンの例としてのみ掲載されています。

于 2009-06-02T22:08:12.027 に答える