#5 楼 @debugger 我现在做的项目也是这个需求,但是不是通过直接查这数据处理的,而是一个用户有多条登录统计的记录,表结构如下
# table user_endurance_records
Column | Type | Modifiers
------------+---------+---------------------------------------------------------------------
id | integer | not null default nextval('user_endurance_records_id_seq'::regclass)
user_id | integer |
last_login | date |
amount | integer | default 0
每天都会统计一次,其记录更新逻辑如下:
if 用户昨天有登录
if 此用户存在 last_login 等于前天的记录
将 user_endurance_records 的 amount 加上 1,last_login 更新为昨天
else
新建一条 user_endurance_records
end
end
这样,查询某个用户的登录记录数据大概是:
id | user_id | last_login | amount
-------+---------+------------+--------
51563 | 32 | 2014-05-22 | 5
57222 | 32 | 2014-05-30 | 7
64819 | 32 | 2014-06-01 | 1
66525 | 32 | 2014-06-03 | 1
69257 | 32 | 2014-06-08 | 3
72849 | 32 | 2014-06-16 | 7
如果不那么干,那么你可能自己要写个聚合函数!以实现你要的这种比较特殊的逻辑。
LZ 资料搜索得还不够,实现可以简单也可以复杂可以安全也可以不那么安全,不过都是需要实现“验证”,只要你规定的这个“钥匙”能够在你的 gitlab 验证通过,也能在你的个人应用那边验证通过就可以了。
现在像微博腾讯等等这些第三方登录都是根据 oauth 协议开发了自己的一套验证系统。
而 Ruby 对应的有个工具 oauth2-provider
之前我做过 PDF 导出的,是自己加载的中文字体,不过在加载的时候是可以指定此字体的名称的。我没做过加水印,但是以我的经验,像 LZ 这种需求,应该得在代码里自己去加载字体(自己下载个字体文件,然后放到项目里去),然后指定画笔用此种字体,而不是依赖于系统自带的字体,或者事先在系统安装你需要的字体。
当项目到达某个结点之后,就对 migrations 打包一次即可。如果你说我需要 rollback
怎么办,我认为没机会存在这种情况,因为你已经有了上千个 migrations,你说我要回滚到第 500 个 migrations 去,这绝对体现了你们的产品经理和技术总监的能力是多么得糟糕!万一真有这种情况,也绝对是继续写代码,将逻辑和数据回迁到之前去。
对于用文件夹这种结构化的文件存放,本身 rails 就支持,而我认为这个也并不是很需要,就算是大型的项目。
通常项目有大版本更新后,并且到了稳定状态,就可以对迁移文件进行打包了,可以不全部打包,保留 1 个月或者两个月内的迁移文件就可以了。
试试:Object.const_get 'Admin::In::User'
看不太懂,能否具体一点输出结果
?又或者说明一下,是为了统计什么样的数据?例如:统计用户最长的连续登录天数?
两部分工作
1、数据迁移 2、不兼容代码修复
数据迁移可以用 https://github.com/maxlapshin/mysql2postgres 这个工具, 记得检查迁移后的 schema 是否正确
不兼容代码只能通过测试或者手动测,把出错的都修了
整体设计挺简洁,看起来挺舒服的,赞一个!
如果将右边栏去掉,单独放在某个页面里我认为会更好。因为我认为博客,就是让人看文章的,博主信息就可以不需要了,如果看的人要看,那么再专门都介绍的页面去看就好了。
都提示编码错误了,不妨找找究竟是哪一行代码出错了。
将你那些 js 和 css 文件分别都放进 application.js
和 application.css
,这样在预编译的时候,就会把这些文件合并成一个文件。
// app/assets/javascripts/application.js
//
//= require jquery
//= require jquery_ujs
//= require moment.min
//= require moment-zh-cn
//= require bootstrap
//= require daterangepicker
/* app/assets/stylesheets/application.css*/
/**
*= require daterangepicker-bs3
*= require nv.d3.css
*= require jquery-tablesorter/theme.bootstrap
*= require public/nsprogress
**/
@import "bootstrap";
@import "font-awesome";
@import "public/base";
@import "public/input";
@import "public/form_filter";
@import "public/table";
@import "public/accordion";
@import "sessions";
Rails4 在编译的时候会先检查这些文件有没有变动,如果有的话就重新编译一次,如果没有的话就跳过。缓存相关文件你可以在 tmp/cache/assets
里找到。
另外,如果你是用 capistrano
做一键部署的话,那么可以把缓存文件放到 shared_path
里去,然后在跑 rake assets:precompile
之前,把缓存目录重新链接到 current_path
,这样 Rails 就会自动检查决定是否要重新编译。
先检查一下服务器的 shared 目录有没有相应的文件夹,或者 deploy 脚本有没有已经自动去链接这个文件夹,如果有就去掉,然后在部署脚本 config/deploy.rb
里加上
namespace :deploy do
desc "ln_cache_assets_folder"
task :ln_cache_assets_folder, roles: :web do
run "ln -nfs #{shared_path}/cache #{release_path}/tmp/cache"
end
end
before "deploy:assets:precompile", "deploy:ln_cache_assets_folder"
如果是第一次部署的话,隔 30 秒敲一下回车键就好了,这样就不会断了,嘿嘿
d3js
或者 hightchart
楼主为啥不用 nginx + unicorn
介绍个工具: Nokogiri
功能没出来之前,不要考虑什么效率,因为你都不知道真正需要优化的在什么地方
错误:Ip.joins(:user).order("users.user_name asc")
@saiga 你是一开始就是 4.1.1 的吧?
$LOAD_PATH
指的是 Ruby 读取外部文件的一个环境变量,其实和 windows 的环境变量是一个概念。Ruby 会在这个环境变量的路径中读取需要 require 的文件,如果在环境变量中找不到自己想要的文件,就会报 LoadError 错误。还有$LOAD_PATH 和$:指的都是同一个环境变量
__FILE__
指的是当前 rb 文件所在目录的相对位置
我谷歌来的,不知道楼主所谓的 至于如何深层次理解,还是没搞明白,也尝试找了答案,但是没找到。
是为了表达什么意思
不是有这个工具么:Axure
期待楼主能分享更多一些这个过程中事情,哈,有可能的话做一期 teahour @lgn21st