Rails: shell 控制器中的命令

Rails: shell command in controller

我正在尝试 运行 shell 命令与 rails 控制器中另一个项目的 rake 任务:

def generate
  render json: `cd /Users/user/project && rvm use ruby-2.1.1@gemset && bundle exec rake users:build`
end

问题是没有为那个任务工作(什么都没发生)但是如果我 运行 rake routes 例如它 运行 宁好。

如果您正在 运行 另一个 ruby 项目,请确保在 运行 命令之前清理当前的捆绑环境。 Bundler 提供了一种简单的方法来解决这个不方便的问题:

 Bundler.with_clean_env{   
    render json:  `cd /Users/user/project  && rvm use ruby-2.1.1@gemset && BUNDLE_GEMFILE=path/to/Gemfile bundle exec rake users:build`
 }

注意 BUNDLE_GEMFILE 和 Bundler.with_clean_env

最好!

您可以试试这个(将以下片段放在您的控制器文件中)而不是发出系统调用:

require 'rake'

Rake::Task["users:build"]