要更改ruby脚本中的目录?

时间:2010-07-27 00:14:35

标签: ruby-on-rails ruby

我想创建一个新的rails应用程序并启动该应用程序的rails服务器,所有内容都来自ruby脚本。

我的代码如下:

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

然而,当运行“rails server&”时该路径不在my_app文件夹中,而是在父文件夹中。

有没有办法在脚本中更改目录,以便我可以为该新应用程序运行“rails server”,“rake about”和“rake db:migrate”?

所有的工作提示都将受到赞赏。

7 个答案:

答案 0 :(得分:349)

不要听他们,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

答案 1 :(得分:91)

使用Dir.chdir

Dir.chdir "my_app"

答案 2 :(得分:3)

使用Dir.chdir更改脚本的工作目录。

答案 3 :(得分:3)

系统支持:chdir参数,该参数允许您指定其工作目录:

adb start-server

输出'/ tmp'

答案 4 :(得分:1)

使用 Dir.chdir(“[aString]”)

答案 5 :(得分:1)

为什么你不能这样做:

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

答案 6 :(得分:1)

以下行具有相同的输出:

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

你也可以运行rails并创建一个应用程序(这在rspec测试等方面很有帮助):

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

并且您可以运行rails服务器;)