刚开始学习ruby,请教如何把ruby代码打包成可执行文件
刚刚开始学习ruby,请教如何把ruby代码打包成可执行文件,在任何其他机器上都可以执行。在网上搜到的方法:
1. rubyscrip2exe
ruby rubyscrip2exe hongbao.rb 没有反应。
2. exerb
2.1 直接执行ruby exerb hongbao.rb 生成的exe文件不能用。错误如下:
hongbao.rb:2:in `require': No such file to load -- watir (LoadError)
from hongbao.rb:2
2.2 尝试先用mkexy生成exy文件。但是我的代码是个死循环,并且是要接受命令行输入的。
执行ruby mkexy hongbao.rb的话,一直在提示我键盘输入,和直接执行代码没什么不同了
代码如下:# coding:utf-8
require "watir"
class HongBao
def initialize(filename)
@filename = filename
@str="看不清"
@str2="星座运势"
end
def getHongbao
ie=Watir::IE.new
while true
IO.foreach("#{@filename}") do |line|
puts line
arr=line.split(' ')
name=arr
year=arr
month=arr
day=arr
ie.goto "http://hongbao.app.baidu.com/hongbao/inputname"
ie.text_field(:name, "name").set(name)
ie.select_list(:id, "select-year").select(year)
ie.select_list(:id, "select-month").select(month)
ie.select_list(:id, "select-day").select(day)
ie.checkbox(:id, "check-1").set
ie.text_field(:id, "captcha").clear
#puts "checkSum:"
#checkNum=gets
#ie.text_field(:id, "captcha").set(checkNum)
#ie.button(:id, "bn").click
while ie.text.encode("utf-8","gbk").include? "#{@str}"
print "please input check number:"
checkNum=gets
ie.text_field(:name, "captcha").set(checkNum.encode("utf-8","gbk"))
ie.button(:id, "bn").click
sleep 1
end
sleep 1
if not ie.text.encode("utf-8","gbk").include? "#{@str2}"
puts "got it"
exit 5
end
puts "Enter to continue... ..."
gets
end
end
end
end
aHongBao = HongBao.new("info.txt")
aHongBao.getHongbaoinfo.txt的如下:
张三 1986 05 10
李四 1984 10 18
王五 1988 03 21
赵六 1980 11 04 试试看ocra。 ocra比较好用 问题解决情况:
使用了ocra打包ruby脚本。
1、首先代码去掉了循环读取info文件的死循环(while true)# coding:utf-8
require "watir"
class HongBao
def initialize(filename)
@filename = filename
@str="看不清"
@str2="星座运势"
end
def getHongbao
ie=Watir::IE.new
# while true
IO.foreach("#{@filename}") do |line|
puts line
arr=line.split(' ')
name=arr
year=arr
month=arr
day=arr
ie.goto "http://hongbao.app.baidu.com/hongbao/inputname"
ie.text_field(:name, "name").set(name)
ie.select_list(:id, "select-year").select(year)
ie.select_list(:id, "select-month").select(month)
ie.select_list(:id, "select-day").select(day)
ie.checkbox(:id, "check-1").set
ie.text_field(:id, "captcha").clear
#puts "checkSum:"
#checkNum=gets
#ie.text_field(:id, "captcha").set(checkNum)
#ie.button(:id, "bn").click
while ie.text.encode("utf-8","gbk").include? "#{@str}"
print "Please input check number:"
checkNum=gets
ie.text_field(:name, "captcha").set(checkNum.encode("utf-8","gbk"))
ie.button(:id, "bn").click
sleep 1
end
sleep 1
if not ie.text.encode("utf-8","gbk").include? "#{@str2}"
puts "got it"
exit 5
end
puts "Enter to continue... ..."
gets
end
# end
end
end
aHongBao = HongBao.new("info.txt")
aHongBao.getHongbao2、然后把info.txt内容减少到1条
1,2 两步的原因是这段代码执行的时候有个需要输入验证码的地方,如果死循环或者info.txt数据条数太多,ocra打包的时候一直在循环里,或者info数据太多花费太长时间。
3、执行cora hongbao.rb。输入一次验证码。cora打包成功,得到可执行exe文件。
4、添加更多的数据到info.txt
仍然存在的问题:如果想保留while死循环,那么该怎么打包呢? 对于死循环的代码,只需判断一下Ocra即可,这样ocra就可以正常打包了。
看下面的例子:def main_loop
loop do
puts "Hello"
sleep 1
end
end
unless defined? Ocra
main_loop
end
页:
[1]