【问题标题】:In Terminal: #rails works but #sudo rails does not -RVM Gemset在终端中:#rails 有效,但 #sudo rails 无效 -RVM Gemset
【发布时间】:2011-05-01 17:34:02
【问题描述】:

alec@Locke:~/workspace/rails/nwis$ rails -v Rails 3.0.7 alec@Locke:~/workspace/rails/nwis$ sudo rails -v sudo: rails: command not found

我需要使用 sudo,因为当我尝试在我的机器上运行 rails server 时出现权限被拒绝错误。

我认为这是 RVM 和使用 Gemsets 的问题,但我不知道为什么。我尝试使用 sudo 为每个命令重新运行 Gemset 设置过程,以确保我的 root 用户和我的普通用户在同一页面上,但这给了我相同的结果。

要清楚我为什么以 sudo 身份运行;尝试启动 Rails 服务器时,会发生以下情况:

rails server
=> Booting WEBrick
=> Rails 3.0.7 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/home/alec/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/server.rb:267:in `initialize': Permission     denied - /home/alec/workspace/rails/nwis/tmp/pids/server.pid (Errno::EACCES)
    from /home/alec/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/server.rb:267:in `open'
    from /home/alec/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/server.rb:267:in `write_pid'
from /home/alec/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.2/lib/rack/server.rb:203:in `start'
from /home/alec/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands/server.rb:65:in `start'
from /home/alec/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:30:in `block in <top (required)>'
from /home/alec/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:27:in `tap'
from /home/alec/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:27:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'`

【问题讨论】:

  • 使用 rvm,你真的不应该使用 sudo —— 你可能想尝试清除系统范围内安装的 gems(你通过 sudo 安装的)并重新开始。如果您需要其他用户拥有的 rails 目录,请考虑使用 sudo 创建必要的组,将自己添加到该组,并授予组对父目录的写入权限。
  • 很有可能“权限被拒绝”错误是因为您以前使用过 sudo 进行某些操作。检查文件(尤其是 tmp 和日志文件)的权限,并确保它们属于 alec,而不是 root。或者只是在 rails 应用程序目录中尝试sudo chown -R alec:users *。 (使用存在的组,例如“alec”或“staff”)

标签: ruby-on-rails rvm sudo


【解决方案1】:

这可能是你的问题:

Permission     denied - /home/alec/workspace/rails/nwis/tmp/pids/server.pid

删除该文件(可能通过 sudo)和任何其他可能在 sudo 下创建的临时文件。然后你应该能够像你一样运行rails,而不需要sudo。将两者混合总是会给您带来权限问题。

或者,只需在 Rails 根目录中运行 sudo chown -R alec:alec .(或任何您的组)即可将所有所有权重置为您自己。

【讨论】:

  • 这是完整的命令吗?这是我的终端: 输入:~/.rvm$ sudo chown -R alec:alec 输出:chown: `alec:alec' 后缺少操作数
  • 对不起,不 - 您需要添加目录才能应用它。已在我的回复中修复。
【解决方案2】:

根据您的 /etc/sudoers 和发行版的默认 sudo 构建,sudo 很可能不会保留您的 PATH(以及其他环境变量)。有几个选项:

  1. 配置 /etc/sudoers 以保留您想要的环境变量,尽管对于 PATH 您可能会遇到问题:sudo changes PATH - why?
  2. 在系统范围内为所有用户安装 rvm
  3. 使用 rvmsudo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2021-12-23
    • 2012-04-02
    相关资源
    最近更新 更多