11 年的时候加了一个 erlang 的邮件列表,joe 大 经常在里面回答各类问题,让人感动,joe 大即是一位学富五车的学者,同时也是一位非常牛逼的程序员,他希望自己设计实现的 erlang 能被更多的人使用,这种心态就和我们大部分的程序员一样,希望自己开发的产品能被广大的人民群众使用,我读过两本 erlang 的书,<>(封面是只袋鼠) 和 <> http://learnyousomeerlang.com, 读的很吃力,一是因为我是边敲代码边读,二是因为 erlang 确实和以前学的 c, java, ruby 等语言有很大的不同对我来说有种颠覆的感觉,所以现在推荐由 joe 大 亲自写的书 <>,已经有第二版了,读这本书时你可以感觉到 joe 大 就好像站在你的面前教你写 erlang 一样,想不会都难,不管怎样学学 erlang 开阔下视野,拓展下思维都是件很有意义的事情。
来自实战经验,接地气,图文并茂,逻辑清晰,叙事有条不紊,可以看出作者写这篇博文非常用心,心态非常平和,点赞收藏。
真实的困难都隐藏在具体的实现细节中,用 sinatra 的话,你会在下面的地方觉得难受,
刚开始创建一个新项目时
构建项目的结构
构建标准的开发,测试,生产三套环境
数据库连接
gem 包管理
创建模型,加载模型,或者加载其他任何你新创建的文件
database migration
管理 rake 任务
管理定时任务
写测试
问题求助,遇到问题得不到充分的帮助
后台管理
日志
想要一个类似 rails console 的 console
部署
编辑器
后期维护
项目交接
佩服楼主的勇气和决心
#8 楼 @luliangshu 应该不用开 setInterval,iframe 有个 load 事件,你试试监听这个事件就行了
$('#my-iframe').load(fucntion(){
// 在这里获取你要的内容
})
#6 楼 @luliangshu 提交成功后,rails 返回的内容会跑到 iframe 中,你用 js 从 iframe 中把你需要的内容拿出来放到前台显示出来就可以了。
#4 楼 @luliangshu 这个和是否使用了 iframe 没有关系,使用 iframe 的目的是为了在 form 表单提交后,把 form 表单的 target 属性指向 iframe,这样避免了页面刷新,看起来像 ajax,其实还是普通的 form 表单提交。而你要使用 form 表单上传文件,这又必须依赖普通的 form 表单提交。浏览器不支持 form 的 accept 属性,所以你应该别用 format.js 了,用默认的 format.html 就行了
你要设置对应的请求头才行,比如curl --header "Accept: application/javascript" url
这样 rails 才能知道你要的格式是 javascript
Asset logical path has no extension: pa 这句话的意思是 pa 这个文件在资源的编译路径中,但是 pa 没有扩展名,所以产生了异常。 rails 里 sprockets 默认会把所有的包含在 Asset logical path 中的非 JS 或 CSS 文件编译,所以你到 app/assets/, lib/assets/, vendor/assets下找找看有没有pa这个文件,有的话给它加个扩展名,或者干脆把这个文件移除。
感觉你的这个配置写的有点不好,
config.assets.precompile += %w(projects.js projects.css jquery.min.js jquery.fileupload.js
jquery.iframe-transport.js jquery.ui.widget.js)
jquery.min.js jquery.fileupload.js jquery.iframe-transport.js jquery.ui.widget.js 这些资源不应该单独编译的,应该是在你的 params[:controller] 或者 application.js 文件里包含 (require),然后你只需要编译 params[:controller] 这个资源文件,这样的话就能把 jquery.min.js jquery.fileupload.js jquery.iframe-transport.js jquery.ui.widget.js 合并到 params[:controller] 文件里了,否则 jquery.min.js,jquery.fileupload.js 等等这些文件你还是要单独产生 http 请求的。
翻译的很好
支持开源 [email protected]
@ytwman 你看下 development.rb 这个文件,如果 config.assets.debug = true,那么改成 config.assets.debug = false,这个改动能够减少大量的 http request
#3 楼 @ywjno 嗯 github 对 api 的调用确实有限制,http://developer.github.com/v3/#rate-limiting,这个我还没有考虑过,如果你的应用确实需要大量调用 api 时,可以和 github 联系叫他们帮你提高调用限制
@francistm render json: @person
应该是相当于 render json: @person.to_json
@hooopo 有 star 这个项目,但是一直没有用。我接手过的一些老项目 (没有任何的独立的数据库文档,也没有使用类似 schema_comments 的 gem),就是把 comment 写在 migration 文件里,所以为了能从这些老项目中提取出一些文档,我就写了这样一个小工具
#36 楼 @zputee 这个例子不错,如果这样改下效果可能更好些,可以排除 def 的干扰
@name = "li 4"
cc.instance_eval{
p @name #输出zhong 3
}
p = Proc.new { @name }
puts p.call #输出的是 li 4
cc.instance_eval &p # 输出的是zhong 3,把proc的闭包特性直接无视了
class C
def initialize
@name = "zhong 3"
end
def hi(p)
puts p.call
end
def hi2(&p)
puts p.call
end
end
C.new.hi(p) # 此时不能简单的认为proc会嵌入到hi方法中,实际输出的是 li 4
# 如果proc在call的时候能嵌入到hi方法中,那么输出的应该是 zhong 3
C.new.hi2 do
@name # 输出的是li 4
end
instance_eval 是一个比较特殊的方法,感觉它可以无视 proc 的闭包性 在 ruby1.9 中,instance_eval 不能挂 lambda 转换过来的 proc,估计 lambda 的闭包性是强制的,无法无视了哈哈
#6 楼 @hpyhacking 帖子的很多内容在《Ruby 编程语言》都有讲到,我算是做了一次搬运工,然后做了些试验
#12 楼 @wxianfeng 好啊,我也是这么想的
#2 楼 @siriuszhuang 由 lz 的那个比如,我猜测 lz 可能还没有在实际的生产活动中遇到由并发引起的问题,lz 可能是出于职业习惯在预估一些可能由并发引起的问题。 对于 lz 提到的 16 个 workers 和那个比如,我们可以想像一下银行的存款业务。 比如我今天打算去工行存 5 毛钱,工行丫的给我开了 16 个窗口,结果一并发,工行给我同时存了两份 5 毛,当然这种事情是不会发生的,要不然我就不会只存 5 毛钱了。其实你的 master 启再多的 workers 也没有关系,因为一个用户创建城市的请求最终会分发到某一个 worker 去完成的,而不是同时交给多个 worker 去做的。 对于并发可能引起的问题,lz 得先问问自己,我的应用里是否有多个消费者同时竞争同一个资源. 其实 lz 举的例子里是一个用户创建一个城市,没有竞争的情况出现,所以在这个例子里是不用担心并发的问题。