簡體   English   中英

Ruby on Rails:使用“rails generate controller Welcome”時權限被拒絕

[英]Ruby on Rails: permission denied when using “rails generate controller welcome”

我在 Red Hat 服務器上使用了 Ruby on Rails。 當我嘗試生成控制器文件時,出現此錯誤:

[ec2-user@ip-172-31-22-128 testApp4]$ rails generate controller welcome
/home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `initialize': Permission denied @ rb_sysopen - /tmp/spring/fea371aaf9d69cfa58bd12f69b3f1bf6.pid (Errno::EACCES)
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `open'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `open'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:22:in `initialize'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:14:in `new'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/server.rb:14:in `boot'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:43:in `block in boot_server'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:41:in `fork'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:41:in `boot_server'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/run.rb:24:in `call'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/rails.rb:23:in `call'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/client.rb:26:in `run'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/bin/spring:48:in `<top (required)>'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `load'
from /home/ec2-user/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `<top (required)>'
from /home/ec2-user/testApp4/bin/spring:16:in `require'
from /home/ec2-user/testApp4/bin/spring:16:in `<top (required)>'
from bin/rails:3:in `load'
from bin/rails:3:in `<main>'

我通過運行解決了這個問題

sudo chmod -R 1777 /tmp

希望這能幫助像我這樣不想停用 spring gem 的其他人

它需要所有權來為每個服務器啟動重寫 pid。

我必須使用完整的本地路徑和 sudo 運行它

$ sudo chmod -R 777 /Users/MyName/Desktop/projects/my_project/tmp/

我查看了試圖編寫 pid 文件lib/spring/env.rb

除非設置了XDG_RUNTIME_DIR否則該XDG_RUNTIME_DIR每次都會嘗試在同一位置創建一個臨時目錄:

path = Pathname.new(File.join(ENV['XDG_RUNTIME_DIR'] || Dir.tmpdir, "spring"))

將所述變量設置為一個唯一的目錄對我來說很有用:

export XDG_RUNTIME_DIR=/tmp/`whoami`

缺少 tmp 文件夾的 writable 權限。 運行chmod 777 tmp/

我在 Ubuntu 20.04 中處理 Rails 6 應用程序時遇到了同樣的問題。

每次我運行命令rails assets:clobber以完全刪除public/assets中的舊資產時,我都會收到錯誤消息:

errno::enotempty: 目錄不為空@dir_s_rmdir

errno::eacces: 權限被拒絕 @ apply2files

並且日志指向導致它的文件的路徑,在我的情況下是public/packs/manifest.json文件。

我嘗試刪除它或更改權限,但沒有任何效果。 我也試過刪除項目中的tmp目錄,但是沒有用。

這是我修復它的方法

我使用ls -lh命令列出了該目錄中的所有文件和目錄,該命令為我提供了以下輸出:

-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.7K Oct  6 20:29 404.html
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.7K Oct  6 20:29 422.html
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.6K Oct  6 20:29 500.html
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem    0 Oct  6 20:29 apple-touch-icon.png
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem    0 Oct  6 20:29 apple-touch-icon-precomposed.png
drwxr-xr-x 3 promisechukwuenyem promisechukwuenyem 4.0K Oct 13 09:20 armstrong_tools
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem    0 Oct  6 20:29 favicon.ico
drwxr-xr-x 3 root               root               4.0K Oct  8 13:06 packs
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem   99 Oct  6 20:29 robots.txt

我意識到文件和目錄的權限很好,但是, packs目錄具有與其他文件和目錄的權限分開的root所有權:

drwxr-xr-x 3 root               root               4.0K Oct  8 13:06 packs

我只是運行下面的命令將所有權從 root 更改為 promisechukwuenyem:

sudo chown -R promisechukwuenyem:promisechukwuenyem packs/

現在,當我運行 command rails assets:clobber以完全刪除public/assets中的舊資產時,它工作得很好。

就這樣。

我希望這有幫助

使用rails server時出現此類錯誤(permission denied @ apply2files)。

sudo rails server解決了我的問題。

或者,

export XDG_RUNTIME_DIR=/run/user/${id -u}

更改此系統變量。 id -u返回您的 UID(用戶 ID),這是您有權在/run/user/下寫入/讀取的目錄名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM