Ответ 1
Используйте Dir.chdir
:
Dir.chdir "my_app"
Я хочу создать новое приложение 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" для этого нового приложения?
Все полезные советы будут оценены.
Используйте Dir.chdir
:
Dir.chdir "my_app"
Не слушайте их, 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
Используйте Dir.chdir
, чтобы изменить рабочий каталог для script.
Используйте Dir.chdir( "[aString]" )
Почему вы не можете просто так:
#!/usr/bin/env ruby
system 'rails new myapp && cd myapp && rails server &'
Следующие строки имеют одинаковый вывод:
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;)
Система поддерживает аргумент: chdir, который позволяет вам указать рабочий каталог:
system("echo Test; pwd", chdir: '/tmp')
выходы '/tmp'