2

私は CakePHP アプリケーションを開発しようとしており、Vagrant を使用してテスト環境を実行しています。ただし、ブラウザでこのエラーが発生していました

Warning (2):
  session_start() [http://php.net/function.session-start]:
    open(/var/lib/php/session/sess_speva7ghaftl8n98r9id5a7434, O_RDWR) failed:
      Permission denied (13) [CORE/Cake/Model/Datasource/CakeSession.php, line 614]

VMにSSHして実行することで、エラーを取り除くことができます

[vagrant@myserver ~]$ sudo su -
[root@myserver ~]# chown -R vagrant. /var/lib/php/session/

VMを再起動するたびにこれを行う必要はありませんので、これをmyserver.ppに追加してみました

exec { 'chown':
  command => 'chown -R vagrant. /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}

しかし、VMの起動中にエラーが発生します...

err:
/Stage[main]/Myserver/Exec[chown]/returns: change from notrun to 0 failed:
  chown -R vagrant. /var/lib/php/session/
  returned 1 instead of one of [0] at /tmp/vagrant-puppet/manifests/myserver.pp:35

インターネットで使用方法の有用な例を見つけることができませんでしたexec。また、Vagrant や Puppet を使用したことがないため、上記のコードは私が思いついた最良の推測にすぎません。単純な修正である場合は申し訳ありません。これを機能させるには。

which chownパスが であることを vm 内で使用して確認し/binました。コマンドは、自分で vm で実行した場合とまったく同じです。問題を引き起こしているのはユーザーだと思います。私はその線を正しく持っていますか?.pp ファイルからルートとしてコマンドを実行することさえ可能ですか?

4

1 に答える 1

4

execを使用する場合、通常、実行するコマンドへのフルパスを入力する必要があります。したがって、コマンドをに変更すると

exec { 'chown':
  command => '/bin/chown -R vagrant:vagrant /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}

imoで動作するはずです。

ただし、アプリケーションのインストール方法によって大きく異なります。アプリケーションのセットアップ/起動もPuppetで管理されている場合は、次のように、関心のあるディレクトリをPuppetで管理することもできます。

file { "/var/lib/php/session" : 
  ensure => directory,
  group => "vagrant",
  owner => "vagrant",
  recurse => true,
}

アプリを起動する前に。コマンドを実行する代わりにリソースを管理するので、これははるかにPuppetの方法になります。ただし、通常、/ var / lib/...はroot以外の誰かが所有するべきではありません。

したがって、アプリがどのように開始されるかを調べて、別のユーザーまたはrootとして開始する必要があります。execで開始する場合は、プロパティを追加できます

user => root

それに、それもトリックを行う必要があります。

于 2012-12-13T16:22:33.753 に答える