Homebrewでパーミッションの問題が発生しました。これにより、RubyPathname.writable?
とPathname.writable_real?
.
マシン・ワン
このマシンでは、許可の問題はありません。Dir/usr/local
はadmin
グループのメンバーによって書き込み可能です:
$ ls -ld /usr/local/
drwxrwxr-x 18 root admin 612 25 Jun 09:24 /usr/local/
私はadmin
グループにいます:
$ whoami
martin
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root martin
writable?
また、Ruby は、 orを使用するかどうかに関係なく、次のように報告しますwritable_real?
。
$ irb
>> require "Pathname"
=> true
>> Pathname('/usr/local').writable?
=> true
>> Pathname('/usr/local').writable_real?
=> true
マシン 2
ただし、このマシンでは、グループ/usr/local
のメンバーが書き込み可能であるにもかかわらず、次のような問題があります。admin
$ ls -ld /usr/local/
drwxrwxr-x 18 root admin 612 24 Jun 23:12 /usr/local/
そして私はadmin
グループにいます:
$ whoami
mgd
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root mgd sgd
書き込み不可の Ruby のレポートPathname.writable?
:/usr/local
$ irb
>> require "Pathname"
=> true
>> Pathname('/usr/local').writable?
=> false
>> Pathname('/usr/local').writable_real?
=> true
なんで?
誰でも違いを説明できますか?
ドキュメントによると、2 つの関数の違いは次のとおりです。
writable?
: パスは、呼び出しプロセスの実効ユーザー ID によって書き込み可能ですか?writable_real?
: パスは、呼び出しプロセスの実ユーザー ID によって書き込み可能ですか?
Pathname.writable?
(明らかに) 等しい条件下で異なる動作をする理由はまだわかりません。