如何实现类似 Rails Console 的东西(转)

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

➜ 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](http://www.ruby-doc.org/stdlib-2.0/libdoc/irb/rdoc/IRB.html) 的库,实际上,你现在就可以直接执行` irb` 进入 Ruby 的控制台,在里面可以进行任何 Ruby 的代码执行。

想要实现一个类似 Rails console 的东西,就需要用到 [IRB](http://www.ruby-doc.org/stdlib-2.0/libdoc/irb/rdoc/IRB.html) 来启动控制台。

<b>来一个最简单的例子</b>
>```bash
foo 
  Rakefile 
  post.rb

post.rb 来点简单的代码:

class Post
attr_accessor :title
def test(a)
[self.title,a].join(" = ")
end
end


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

$ 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"


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容