【问题标题】:Permission not maintained for newly created files while using vagrant使用 vagrant 时未维护新创建文件的权限
【发布时间】:2013-07-06 06:10:06
【问题描述】:

我正在使用带有精确 64 框和 Laravel 4 项目的 vagrant。 我已将 Storage 文件夹设置为可写(777 仅适用于我),每次创建新文件(例如会话)时,我都需要再次手动将新文件设置为可写。

是否有任何选项可以将新创建​​的文件设置为可写以防止将来出现此类问题?

编辑:这是包含新会话的会话文件夹上的 ll -la 输出示例(从 vagrant 框中完成),也许它会有所帮助。

vagrant@precise64:/myfinalproject$ ll -la ./app/storage/sessions/
total 16
drwxrwxrwx 1 vagrant vagrant 4096 Jul  9 04:29 ./
drwxrwxrwx 1 vagrant vagrant 4096 Jun 10 12:57 ../
-rwxrwxrwx 1 vagrant vagrant   13 Jun 10 12:57 .gitignore*
-rw------- 1 vagrant vagrant  229 Jul  9 04:29 sess_u8ov414cgie6v3afmkgn3net33

【问题讨论】:

  • 你能告诉我们命令的结果(在 SSH 进入你的 vagrant box 之后)ll -la 在新创建文件后的目录上吗?
  • 我已经编辑了问题并添加了您所问的内容。
  • storage folder 是什么意思?你的意思是synced folder
  • 存储文件夹只是 Laravel 4 框架中需要可写的文件夹。

标签: ubuntu laravel vagrant


【解决方案1】:

我遇到了一个非常相似(可能相同)的权限问题。我可以查看该网站一次,之后的所有请求都会导致权限错误。

尝试将以下代码添加到您的 VagrantFile:

# Set the ownership of the app/storage directory
config.vm.synced_folder "app/storage", "/vagrant/app/storage", :owner => 'www-data', :group => 'www-data'

希望对您有所帮助。以下来源为我提供了解决方案:https://github.com/experience/vagrant-laravel-application/blob/master/Vagrantfile

【讨论】:

  • 不幸的是它对我没有帮助。无论我如何尝试名称/组名(在我的主机中尝试我的用户),除了 vagrant 作为所有者和组之外,没有任何效果。这给了我同样的问题。任何其他所有者或组结果:The following SSH command responded with a non-zero exit status.Vagrant assumes that this means the command failed!
【解决方案2】:

将您的 apache 用户和组设置为 vagrant。在 ubuntu 中,编辑 /etc/apache2/envvars 并更改

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

export APACHE_RUN_USER=vagrant
export APACHE_RUN_GROUP=vagrant

【讨论】:

  • 当您在其中安装 apache 时,这似乎解决了 Homestead 的持续问题。使用 Homestead.yaml 文件,您无法定义“所有者”和“组”
  • 是的!所有其他解决方案都建议将 chmod 设置为 77x。这是唯一对我有用的解决方案,谢谢!
【解决方案3】:

如果你说的是shared foldersynced folder,你可以使用可选参数来控制权限:

config.vm.share_folder "shared_folder", "/myfinalproject", "/host/path", :owner => "vagrant", :group => "vagrant"

参考

http://rubydoc.info/gems/vagrant/Vagrant/Config/VMConfig%3ashare_folder

来源

# File 'lib/vagrant/config/vm.rb', line 53

def share_folder(name, guestpath, hostpath, opts=nil)
  @shared_folders[name] = {
    :guestpath => guestpath.to_s,
    :hostpath => hostpath.to_s,
    :create => false,
    :owner => nil,
    :group => nil,
    :nfs   => false,
    :transient => false,
    :extra => nil
  }.merge(opts || {})
end

【讨论】:

  • 没有帮助,我不断收到“系统”创建的新文件(例如会话文件)的权限问题。
【解决方案4】:

更改它以便同步整个 laravel 应用程序文件夹。不仅仅是特定的存储目录。 我和你有同样的问题,我只是同步存储目录。 Laravel 能够在会话目录中创建一个新文件,但后来无法写入它刚刚创建的文件。

这是我的新配置

config.vm.synced_folder "./", "/var/www", :owner => 'www-data', :group => 'www-data'

【讨论】:

    【解决方案5】:

    对于可能正在搜索此问题但在使用 VirtualBox 时遇到此问题的任何人(并且您正在使用共享文件夹):

    // Get your user id,gid (in this case I'm root):
    # id
    uid=0(root) gid=0(root) groups=0(root)
    
    // Add apache to vbox group
    usermod -a -G vboxsf apache
    
    // Get apache's id,gid
    # id apache
    uid=48(apache) gid=48(apache) groups=48(apache),499(vboxsf)
    
    // Update fstab mount to use these id,gid
    # vi /etc/fstab
          [ add this line to the file ]
          shared-name  /path/to/guest/shared/folder/here  vboxsf  rw,uid=0,gid=0,uid=48,gid=48  0  0
    

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 2012-04-13
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多