所有
在特定目录中创建一些文件后,我使用以下命令。它给我一个错误信息。
命令
desc "new project_name", "new a project with a name"
def new(project_name = 'my_project')
directory 'doc', project_name
path = Dir.pwd + '/' + project_name
system("cd #{path}")
run('bundle install')
#But this command is working that makes me so confusing
#run("cd #{path} && bundle install")
#puts "Initializing complete"
end
错误
create aaaaaaa/views/index.slim
create aaaaaaa/views/layout.slim
run bundle install from "."
Could not locate Gemfile
在初始化新项目时,我看到直接运行此导轨的导轨bundle install
,导轨如何做到这一点?我如何使这个命令工作。
答案 0 :(得分:3)
system
创建一个子流程然后退出。子进程更改了目录,然后完成了,但是您的脚本仍然认为它位于进程认为存在的任何工作目录中。
如果要更改运行脚本的进程的工作目录,请使用Dir.chdir()
。
答案 1 :(得分:0)
Rails实际上使用了一个小小的黑客"打印" bundle install命令到shell并运行它。注意输出中的后退滴答。
print `"#{Gem.ruby}" -rubygems "#{Gem.bin_path('bundler', 'bundle')}" #{command}`
我还认为系统命令并不一定会改变过程'当前工作目录(根据Thor的运行命令)。