Чтобы изменить каталог внутри ruby ​​script?

Я хочу создать новое приложение rails и запустить сервер rails для этого приложения, все с ruby ​​ script.

Мой код выглядит так:

#!/usr/bin/env ruby
system "rails new my_app"
system "cd my_app"
system "rails server &"

Однако при запуске "rails server &" путь не находится в папке my_app, но в родительской папке.

Есть ли способ изменить каталог внутри script, чтобы я мог запускать "сервер rails", "rake about" и "rake db: migrate" для этого нового приложения?

Все полезные советы будут оценены.

Ответ 1

Используйте Dir.chdir:

Dir.chdir "my_app"

Ответ 2

Не слушайте их, Dir.chdir("dir"), возможно, сделает неправильную вещь. То, что вы почти всегда хотите, - это ограничить изменение в конкретном контексте, не затрагивая остальную часть программы следующим образом:

#!/usr/bin/env ruby
system "rails new my_app"
Dir.chdir("my_app") do
  system "rails server &"
end
# back where we were, even with exception or whatever

Ответ 3

Используйте Dir.chdir, чтобы изменить рабочий каталог для script.

Ответ 4

Используйте Dir.chdir( "[aString]" )

Ответ 5

Почему вы не можете просто так:

#!/usr/bin/env ruby
system 'rails new myapp && cd myapp && rails server &'

Ответ 6

Следующие строки имеют одинаковый вывод:

puts Dir.chdir("/tmp") { IO.popen("ls -la") { |io| io.read } } 

puts IO.popen(["ls", "-la", "/tmp"]).read

puts IO.popen("ls -la /tmp").read

# drwxrwxrwt 25 root       root       16384 июля  23 01:17 .
# drwxr-xr-x 22 root       root        4096 июля  22 13:36 ..
# drwxrwxr-x 12 itsnikolay itsnikolay  4096 июля  19 17:14 app_template
# drwx------  2 itsnikolay itsnikolay  4096 июля  21 15:04 .com.google.Chrome.dThb8f
# drwx------  2 itsnikolay itsnikolay  4096 июля  18 20:55 .com.google.Chrome.FGDBGc

также вы можете запускать рельсы и создавать приложение (это может быть полезно в тестах rspec и т.д.):

IO.popen("cd /tmp/ && rails new test_app").read

и всегда можно запустить сервер rails;)

Ответ 7

Система поддерживает аргумент: chdir, который позволяет вам указать рабочий каталог:

system("echo Test; pwd", chdir: '/tmp')

выходы '/tmp'