【问题标题】:running " bundle install " command is failure运行“捆绑安装”命令失败
【发布时间】:2011-10-17 02:52:43
【问题描述】:

所有,

在特定目录中创建一些文件后,我使用以下命令。它给我一条错误消息。

命令

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

我看到rails在初始化一个新项目时直接运行这个推荐bundle install,rails是怎么做到的?我如何使这个命令工作。

【问题讨论】:

  • 系统命令是否从其他位置运行“cd /path_to_directory”?也许从 / 开始也许你应该尝试 cd 到一个绝对目录并检查它是否有效。
  • 我已经编辑了我的问题以进行修复。我确定cd 的目录路径是正确的。

标签: ruby bundle thor


【解决方案1】:

system 创建一个子进程然后退出。子进程更改目录然后完成,但您的脚本仍然认为它在进程认为它所在的任何工作目录中。

如果要更改运行脚本的进程的工作目录,请使用Dir.chdir()

【讨论】:

  • 很好,在system("cd #{path}") 之前添加命令Dir.chdir(path) 就可以了。
【解决方案2】:

Rails 实际上使用了一个小技巧,将 bundle install 命令“打印”到 shell 并运行它。注意输出中的反引号。

print `"#{Gem.ruby}" -rubygems "#{Gem.bin_path('bundler', 'bundle')}" #{command}`

我还认为系统命令不一定会改变进程的当前工作目录(就 Thor 的运行命令而言)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多