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,然后按照您最初的意图登录并以该用户身份执行命令?
我正在尝试 运行 命令: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,然后按照您最初的意图登录并以该用户身份执行命令?