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

匿名 (未验证) 提交于 2019-12-03 02:16:02

问题:

I used Ruby on Rails on Red Hat server. When I trying to generate a controller file, I got this error:

[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>' 

回答1:

I solved that problem by running

sudo chmod -R 1777 /tmp 

hope this helps other people like me who would prefer not having to deactivate the spring gem



回答2:

It needs ownership to write the re-write the pid for each server start.

I had to run it with my full local path & sudo

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



回答3:

I took a look at the library that's trying to write the pid file, lib/spring/env.rb.

The function in question tries to create a temporary directory at the same location each time unless the XDG_RUNTIME_DIR is set:

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

Setting said variable to a unique directory does the trick for me:

export XDG_RUNTIME_DIR=/tmp/`whoami` 


回答4:

Missing permission for tmp folder to writable . run chmod 777 tmp/



回答5:

Or,

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

to change this system variable. id -u returns your UID(user id), which is the dir name where you have access to write/read under /run/user/.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!