1

Puppet をスタンドアロンモードで (初めて) 実行して mongodb をインストールすると、次のpuppet apply -v node.ppエラーが発生します。

Error: undefined method `downcase' for :undef:Symbol at /etc/puppet/modules/mongodb/manifests/install.pp:12 on node ec2.internal
Wrapped exception:
undefined method `downcase' for :undef:Symbol
Error: undefined method `downcase' for :undef:Symbol at /etc/puppet/modules/mongodb/manifests/install.pp:12 on node ec2.internal

私は簡単なグーグル検索を行いましたが、何も明らかになりませんでした。何が欠けているのか誰か説明してもらえますか? Puppet をスタンドアロンモードで実行することとは関係ないと思います。ところで、Debian wheezy で Puppet v3.2.1 と Ruby v1.8.7 を実行しています。

これは私のmongodbモジュールの簡易版で、aptは git からダウンロードした標準の puppet-modue です。

params.pp:

# == Class: mongodb::params ==
#
class mongodb::params {

    $server_pkg_name = $::operatingsystem ? { 
        Debian  => 'mongodb-10gen',
        Redhat  => 'mongo-10gen-server',
    }   
}

repos.pp:

# == mongodb::repos ==
#
class mongodb::repos {

    if $::operatingsystem == 'Debian' {
        class { 'apt': }
        apt::source { '10gen':
            location    => 'http://downloads-distro.mongodb.org/repo/debian-sysvinit',
            release     => 'dist',
            repos       => '10gen',
            key         => '7F0CEB10',
            key_server  => 'keyserver.ubuntu.com',
            include_src => false;
        }   
    }

    #...... Other operatingsystem .......
}

インストール.pp:

# == Class: mongodb::install
#
class mongodb::install {

    class { 'mongodb::params': }
    anchor { 'mongodb::install::begin': }
    anchor { 'mongodb::install::end': }

    package { 'mongodb-server':
        name    => "$::mongodb::params::server_pkg_name",
        ensure  => installed,
        require => [ Anchor['mongodb::install::begin'], Class[$::mongodb::repos] ],
        before  => Anchor['mongodb::install::end']
    }   
}

init.pp:

# == Class: mongodb ==
#
class mongodb {
    include mongodb::repos
    include mongodb::install
}

node.pp:

node default {
    class { 'mongodb': }
}

何が欠けているのか誰か知っていますか?他に必要な情報があれば教えてください。前もって感謝します。乾杯!!

4

1 に答える 1

1

install.php ファイルに 19 行目はありませんが、エラーは基本的にdowncase、文字列ではなくシンボルを呼び出そうとしていることを意味します。インストーラー自体または構成ファイル内のいずれかで、取得するパラメーターをシンボルではなく文字列に変換する必要があります。

編集:私は宝石自体に慣れて:undefいませんが、構成ファイルで定義していないものを置き換えるために、シンボルがどこかにスローされることにも賭けます。このような場合は、gem のメンテナーにバグを報告して、エンドユーザーに適切なものを返すことを検討してください。

于 2013-06-15T21:31:33.963 に答える