IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    如何实现类似 Rails Console 的东西

    Jason Lee发表于 2013-08-15 09:09:00
    love 0

    Rails 提供了一个 rails console,可以让我们很方便的在 启动 Web Server 之外直接调用代码、调用 Model 查询/修改数据等。

    1
    2
    3
    4
    
    ➜  ruby-china git:(master) rails c
    Loading development environment (Rails 4.0.0)
    irb(main):001:0> @post = Post.last
    irb(main):001:0> @post.update_attribute(:title, "Foo bar")
    

    如何实现这个东西

    Ruby 标准库里面带有一个叫 IRB 的库,实际上,你现在就可以直接执行 irb 进入 Ruby 的控制台,在里面可以进行任何 Ruby 的代码执行。

    想要实现一个类似 Rails console 的东西,就需要用到 IRB 来启动控制台。

    来一个最简单的例子

    创建下面这些文件:

    1
    2
    3
    
    foo
      Rakefile
      post.rb
    

    post.rb 来点简单的代码:

    1
    2
    3
    4
    5
    6
    7
    
    class Post
      attr_accessor :title
    
      def test(a)
        [self.title,a].join(" = ")
      end
    end
    

    Rakefile 创建一个 console 命令,并引用 post.rb (这里可以根据自己的情况,引入所有需要的项目文件),然后调用 IRB.start 启动控制台:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    desc "Run Console"
    task :console do |t, args|
      env = ENV['APP_ENV'] || 'development'
      puts "Loading #{env} environment"
      require "./post"
      require "irb"
      require 'irb/completion'
      # 必须执行 ARGV.clear,不然 rake 后面的参数会被带到 IRB 里面
      ARGV.clear
      IRB.start
    end
    

    现在就可以执行 rake console 进入你构建的 App 控制台了:

    1
    2
    3
    4
    5
    6
    7
    8
    
    $ rake console
    Loading development environment
    irb(main):001:0> @post = Post.new
    => #<Post:0x007fe9e5a62b98>
    irb(main):002:0> @post.title = "aabbcc"
    => "aabbcc"
    irb(main):004:0> @post.test("ccddee")
    => "aabbcc = ccddee"
    


沪ICP备19023445号-2号
友情链接