Запуск команды " bundle install " не выполнен

Все,

Я использую приведенную ниже команду после создания некоторых файлов в определенном каталоге. Получает сообщение об ошибке.

Команда

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 непосредственно, когда он инициализирует новый проект, как рельсы могут сделать это? Как мне заставить эту команду работать.

2 ответа

Решение

system создает подпроцесс и затем выходит. Подпроцесс изменил каталог и затем завершил работу, но ваш сценарий по-прежнему считает, что он находится в любом рабочем каталоге, в котором он находится.

Если вы хотите изменить рабочий каталог процесса, выполняющего скрипт, используйте Dir.chdir(),

Rails фактически использует небольшой хак, который "печатает" команду bundle install в оболочку и запускает ее. Обратите внимание на обратные галочки в выводе.

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

Я также думаю, что системная команда не обязательно изменяет текущий рабочий каталог процессов (в терминах команды запуска Тора).

Другие вопросы по тегам