【问题标题】:'rails server' command returns error: `mkdir': Permission denied @ dir_s_mkdir'rails server' 命令返回错误:`mkdir': Permission denied @ dir_s_mkdir
【发布时间】:2015-11-17 10:07:33
【问题描述】:

我正在尝试运行我下载的 Rails 服务器示例。但是,我收到一个权限错误:

我跑:

rails server

我明白了:

=> Booting Puma
=> Rails 4.2.4 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
/usr/share/rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/fileutils.rb:250:in `mkdir': Permission denied @ dir_s_mkdir - /home/username/web-app/tmp (Errno::EACCES)
    from /usr/share/rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/fileutils.rb:250:in `fu_mkdir'
    from /usr/share/rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/fileutils.rb:224:in `block (2 levels) in mkdir_p'
    from /usr/share/rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/fileutils.rb:222:in `reverse_each'
    from /usr/share/rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/fileutils.rb:222:in `block in mkdir_p'
    from /usr/share/rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/fileutils.rb:208:in `each'
    from /usr/share/rvm/rubies/ruby-2.1.7/lib/ruby/2.1.0/fileutils.rb:208:in `mkdir_p'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/server.rb:134:in `block in create_tmp_directories'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/server.rb:133:in `each'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/server.rb:133:in `create_tmp_directories'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/server.rb:77:in `start'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:80:in `block in server'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:75:in `tap'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:75:in `server'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /home/username/.rvm/gems/ruby-2.1.7/gems/railties-4.2.4/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

看到这是我尝试的权限错误:

sudo rails server

但我只收到这个错误

Your Ruby version is 1.9.3, but your Gemfile specified 2.1.7

当 root 用户似乎在使用不同版本的 ruby​​ 时,我该如何克服权限问题?

编辑 1:

ruby --version

返回:

ruby 2.1.7p400 (2015-08-18 revision 51632) [i686-linux]

编辑 2:

sudo ruby --version

返回:

ruby 1.9.3p484 (2013-11-22 revision 43786) [i686-linux]

编辑 3:

我的 web-app 目录中没有 tmp 文件。当我输入 ls -la 时,我得到:

drwxr-xr-x 12 root    root     4096 Nov 15 10:32 .
drwxr-xr-x 31 username username 4096 Nov 17 04:23 ..
drwxr-xr-x 10 root    root     4096 Nov 15 10:32 app
drwxr-xr-x  2 root    root     4096 Nov 15 10:32 bin
-rw-r--r--  1 root    root      126 Nov 15 10:32 browserslist
-rw-r--r--  1 root    root      363 Nov 15 10:32 Capfile
drwxr-xr-x  6 root    root     4096 Nov 15 10:32 config
-rw-r--r--  1 root    root      153 Nov 15 10:32 config.ru
drwxr-xr-x  3 root    root     4096 Nov 15 10:32 db
-rw-r--r--  1 root    root     1301 Nov 15 10:32 Gemfile
-rw-r--r--  1 root    root    10953 Nov 15 10:32 Gemfile.lock
drwxr-xr-x  8 root    root     4096 Nov 15 10:32 .git
-rw-r--r--  1 root    root      470 Nov 15 10:32 .gitignore
drwxr-xr-x  4 root    root     4096 Nov 15 10:32 lib
drwxr-xr-x  2 root    root     4096 Nov 15 10:32 log
drwxr-xr-x  2 root    root     4096 Nov 15 10:32 public
-rw-r--r--  1 root    root      249 Nov 15 10:32 Rakefile
-rw-r--r--  1 root    root      478 Nov 15 10:32 README.rdoc
-rw-r--r--  1 root    root        8 Nov 15 10:32 .rspec
drwxr-xr-x  3 root    root     4096 Nov 15 10:32 spec
drwxr-xr-x  3 root    root     4096 Nov 15 10:32 vendor

【问题讨论】:

  • 更新您的 ruby​​ 版本或在您的 gemfile 中将 ruby​​ 版本更改为 1.9.3
  • /home/matthew/gomrkit-web-app/tmp 设置了哪些权限?在我的本地应用程序上它是 775,但我想它应该是 755。
  • 当我执行 ls -la @japed 时 tmp 不存在
  • 在目标路径中手动尝试 mkdir tmp 并执行 chmod -R 0755 /home/username/web-app/tmp
  • 我尝试了你的建议,最初得到了同样的结果。然后我尝试了 777,它成功了。谢谢@Abhi

标签: ruby-on-rails


【解决方案1】:

首先必须创建 tmp 目录,然后给它必要的权限。这可以通过以下代码完成:

sudo mkdir tmp
sudo chmod 777 tmp

【讨论】:

    【解决方案2】:

    因为每次您运行 rails server 时,它都会在您的 tmp/pids 文件夹中创建一个名为 server.pid 的新文件。在您运行服务器的情况下,它会尝试创建 pid 但您无权在此文件夹下创建任何文件。您需要提供对tmp 目录的写权限。

    【讨论】:

    • 我在 ~/home/username/web-app/ 中找不到 tmp
    • Rails 自动创建 tmp 文件夹。只需为您的应用程序提供写入权限,即从您的应用程序外部~/home/username$ chmod -R 0755 username/web-app
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多