Rails 4: Rakefile 和 Gemfile 作为根用户找不到

Rails 4: Rakefile and Gemfile not found as Root User

我正在尝试 运行 命令:su - <username> -c RAILS_ENV=production rake assets:precompile 作为 root,即使 ruby、rvm 和所有 gem 都是作为另一个用户安装的。那是因为,我无法访问可以使用该用户名登录服务器的计算机。

所以当我运行上面的命令时,我得到以下错误:

rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)

我执行上面的命令时在railsapp目录下。 ls 给我:

Gemfile       README.rdoc  app  config     db   log  public  test  vendor
Gemfile.lock  Rakefile     bin  config.ru  lib  migrate  solr    tmp

同样,如果我这样做:su - <username> -c "bundle",我得到错误:Could not locate Gemfile

我已阅读 SO 上的帖子,例如 Link #1, Link #2, Link #3, Link #4,但 none 已经能够解决该问题。

如果有人知道解决这个问题的方法并且可以给我一个答案,那将是一个巨大的安慰。

由于您以另一个用户的身份安装了 rvm,因此您所有的 gem 等都将被放置在该用户的主目录中,您正在使用的 ruby 的实际版本也是如此。为了让一切都以 root 身份运行,您需要重新安装 rvm system-wide 并以这种方式进行设置,或者您可以尝试以 root 身份获取 RVM 运行。

当您安装 rvm 时,它会将以下行添加到用户的 ~/.bash_profile,因此您可以尝试将其添加到 root 的:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting

在这里,您需要用 $HOME 代替 /home/username,其中用户名是安装了 rvm 的用户。否则,它将默认为当前登录用户的主目录,即 /root.

另一个想法,您说您无法访问可以从中以该用户身份登录的计算机。但是,如果您可以以 root 身份登录,则可以更改系统中的任何内容。假设这是一个 ssh 密钥问题,为什么不直接将您当前计算机的 ~/.ssh/id_rsa.pub 添加到用户的 ~/.ssh/authorized_keys 作为 root,然后按照您最初的意图登录并以该用户身份执行命令?