Composer: file_put_contents (./ composer.json): không mở được luồng: Quyền bị từ chối


96

Tôi đang cố gắng cài đặt Prestissimo vào máy chủ Ubuntu 16.04, nhưng điều đó dẫn đến lỗi:

$ composer global require "hirak/prestissimo:^0.3"
Changed current directory to /home/kramer65/.composer


  [ErrorException]
  file_put_contents(./composer.json): failed to open stream: Permission denied


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--] [<packages>]...

Tôi đăng nhập với tư cách người dùng kramer65, vì vậy tôi sẽ không biết tại sao nó không thể ghi vào thư mục chính của tôi. Phản ứng bình thường của tôi với a permission deniedlà sử dụng sudo, nhưng nhà soạn nhạc sau đó luôn nói:

Không chạy Composer với tư cách người dùng gốc / siêu người dùng! Xem https://getcomposer.org/root để biết chi tiết

Bất kỳ ý tưởng làm thế nào tôi có thể giải quyết điều này?


1
Có thể là hiển nhiên, nhưng phải được hỏi ... các quyền hiện tại của bạn là composer.jsongì?
TheG Treatman

@G BentleyMax - Chưa có ~/.composer/composer.jsontệp nào.
kramer65 18/12/16

Vậy các quyền trên ~/.composer/thư mục là gì? kramer65Có vẻ như không có quyền để viết, a chmodcó thể hữu ích.
AnthonyB

@AnthonyB - Có, tôi thấy bây giờ ~/.composer/thuộc sở hữu của root. Nhưng tôi vừa kiểm tra trên một số hệ thống khác và cài đặt trình soạn nhạc trên máy ảo Ubuntu 16.04 mới và nó luôn thuộc sở hữu của mình root. Tất nhiên là tôi có thể chmodhoặc chownnó, nhưng có nên thay đổi hành vi mặc định này không?
kramer65 18/12/16

Tôi vừa kiểm tra trên Ubuntu 16.04 của mình, thực sự .composer thuộc sở hữu của root, có 755chế độ. Vì vậy, thay đổi chủ sở hữu có lẽ không phải là giải pháp.
AnthonyB

Câu trả lời:


253

Tôi gặp sự cố này để cài đặt laravel / lumen.

Nó có thể được giải quyết bằng lệnh sau:

$ sudo chown -R $USER ~/.composer/

1
Điều này cũng làm việc cho tôi trong cài đặt yii2 tài sản toàn cầu nhà soạn nhạc Plugin nhờ samuel
Geoff

3
Sử dụng $ USER thay vì 'myuser' là lựa chọn tốt hơn.
zennin

2
Nó không giải quyết được vấn đề cho tôi, thật lạ. Bất kỳ lời khuyên khác?
mylord

2
@mylord Đảm bảo rằng .composer là của người dùng của bạn. Cố gắng chạy với~/.composer
Samuel Martins

6
Đây là một mẹo hay. Tuy nhiên, nếu bạn đã tạo dự án của mình, hãy chạy sudo chown -R $ USER my_project
Daniel

16

Để giải quyết vấn đề này, bạn nên mở cửa sổ dòng lệnh và nhập lệnh sau:

sudo chown -R user ~/.composer(với userviệc là người dùng hiện tại của bạn, trong trường hợp của bạn, kramer65)

Sau khi bạn đã chạy lệnh này, bạn sẽ có quyền chạy lệnh yêu cầu toàn cục của trình soạn nhạc.

Bạn cũng có thể cần phải xóa tệp .composer khỏi thư mục hiện tại, để thực hiện việc này, hãy mở cửa sổ dòng lệnh và nhập lệnh sau:

sudo rm -rf .composer


3

Trong trường hợp của tôi, .composerđược sở hữu bởi root, vì vậy tôi đã làm sudo rm -fr .composervà sau đó yêu cầu toàn cầu của tôi hoạt động.

Hãy cảnh báo! Bạn không muốn sử dụng lệnh đó nếu bạn không chắc mình đang làm gì.


3

Tôi cũng phải đối mặt với vấn đề này nhưng trong trường hợp của tôi, tôi đã nhầm danh bạ. Kiểm tra thư mục bạn đang làm việc


2

Trong trường hợp của tôi, tôi không có vấn đề với ~/.composer.
Vì vậy, ở bên trong thư mục gốc của ứng dụng Laravel, tôi đã làm sudo chown -R $USER composer.lockvà nó rất hữu ích.


1

Đây có thể là trường hợp siêu cạnh, nhưng nếu bạn đang sử dụng Travis CI và tận dụng bộ nhớ đệm, bạn có thể muốn xóa tất cả bộ nhớ cache và thử lại.

Đã khắc phục sự cố của tôi khi tôi chuyển từ bản dựng sudo sang không phải sudo.


0

Tôi cũng nhận được ngoại lệ tương tự, nhưng trong trường hợp của tôi, tôi đang sử dụng PowerShell để chạy các lệnh Vì vậy, tôi đã sửa lỗi này bằng hướng dẫn bỏ chặn nhiều tệp trước. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File và sau đó sử dụng phần sau để tải gói & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


0

Trong trường hợp của tôi, tôi đã sử dụng sudo mkdir projectFolderđể tạo thư mục. Nó thuộc sở hữu của người dùng root và tôi đã đăng nhập bằng người dùng không phải root.

Vì vậy, tôi đã thay đổi quyền thư mục bằng lệnh sudo chown mynonrootuser:mynonrootuser projectFoldervà sau đó nó hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.