/bin/bash --login
是以 login shell 模式新开启一个 bash 进程而已。
2 楼的应该就是正确/最优的解决方案。
Gmail,report spam。然后发送方就哭了。
小窍门:这种情况下翻文档不一定比 Google 快,重要的是提炼出问题的关键字:ISODate Z
Homebrew 的话,原因大致是这样(我猜的): 1) 很多 Ruby 程序员都用 Mac 2) Ruby 实现的 DSL 比较漂亮
vim 慢的各位得是装了多少插件啊……
#5 楼 @xiaoronglv 因为还有人在用吧。加功能容易减功能难啊……
#21 楼 @jiyinyiyong “重视人才而不是急需 code monkey 的公司”和“不需要有挑战性”应该是冲突的,既然重视人才了,那肯定是需要人才创造出相应水平的价值的。
#6 楼 @yuhaidonghd 明明是拿在手里的。。。
我都是用 OAuth 2 Resource Owner Password Credentials Flow,登录的时候发用户名密码以及 client id、client secret 来直接获取 access token。另外很自然地,用 https 而不是 http。
User Model 是手写的。OAuth 2 Server 用了 doorkeeper
gem。
好处是: 客户端的开发者可用用自己喜欢的 OAuth2 实现,不管是手写还是使用第三方库,都 OK。 服务端也不用去纠结 token 怎么生成怎么过期怎么认证。手写的 User Model 里面用 BCrypt 已经算是通行的 best practice 了。
API Server 这边大致是这样(Rails 4.1.4, Mongoid 4.0.0):
app/models/user.rb
class User
include Mongoid::Document
include Mongoid::Timestamps
include ActiveModel::MassAssignmentSecurity
attr_accessible :email, :password, :password_confirmation
attr_accessible :display_name
attr_accessor :password
validates :password, confirmation: true, on: :create
validates :password_confirmation, presence: true, on: :create
validates :email, presence: true, uniqueness: true, email: true
validates :display_name, presence: true, length: { minimum: 2, maximum: 42}
before_save :encrypt_password
field :email, type: String
field :password_hash, type: String
field :password_salt, type: String
field :display_name, type: String
def self.authenticate!(email, password)
user = find_by(email: email) rescue nil
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
def encrypt_password
if password.present?
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
end
config/initializers/doorkeeper.rb
module Doorkeeper
class Application
include ActiveModel::MassAssignmentSecurity
end
class AccessGrant
include ActiveModel::MassAssignmentSecurity
end
class AccessToken
include ActiveModel::MassAssignmentSecurity
end
end
Doorkeeper.configure do
# Change the ORM that doorkeeper will use.
# Currently supported options are :active_record, :mongoid2, :mongoid3, :mongo_mapper
orm :mongoid4
resource_owner_from_credentials do
User.authenticate! params[:username], params[:password]
end
native_redirect_uri 'urn:ietf:wg:oauth:2.0:oob'
use_refresh_token
client_credentials :from_basic
access_token_methods :from_bearer_authorization
grant_flows %w(password)
end
#12 楼 @wcc526 OS X 10.10 把原来自带的 ruby 1.8 删掉了,默认使用 ruby 2.0 而已。也就是像 homebrew 这些之前使用 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby 的才会有问题(homebrew 很快就一个补丁修正了)。
如果满足一下两个条件的任意一个,都不会有问题: 1) 不用 ruby 1.8 2) 用 ruby 1.8 但不是用的系统自带的 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
#7 楼 @salleeshi 看了下,Training options 列表里面没有 iOS,只有 OS X(选了以后地区选 China 的话找不到培训机构) 所以这家苹果认证的应该是别的什么培训,与 OS X/iOS 开发无关……
2014718
这种,假如月和日都不补全到两位的话,会有歧义的吧,比如 2014121
、201411
、2014110
https://bugs.ruby-lang.org/issues/7660
You can build ruby in any directory including the source directory, except win32 directory in the source directory.
看起来你在外面比如 G:\ruby-2.1.2
目录下运行 nmake
就可以了吧……
NSArray#isEqualToArray:
是对每个元素用 #isEqual:
比较的,如果不行的话,那么应该是和你的 NSArray/NSMutableArray 里的元素类型有关,和数组容器是不是 mutable 无关。
https://www.dropbox.com/help/287/zh_CN 启用相机上传可以再得最多 3G(而且传完删掉照片也不会有影响)
Rei 的方法灵活性已经很高了啊,随你怎么定义 model,在 page#show
里面,都可以自己处理来实现。为啥一定要纠结在 routes.rb 里面。。。
没问题。 只是按标准的话,任意的域名,设了 CNAME 之后,别的所有例如 MX、A、AAAA 等等都不要设就 OK。
我错了,收回上面的结论。
确实是设了 CNAME 之后,不能再设其它项不假;然后由于裸域至少会有 NS 和 SOA,所有其实是可能会有问题的。所以 github pages 是建议用裸域的话,不用 CNAME 而是设 A 到它们的 IP。
不过实际的情况下,我没仔细试过,不知道具体会出什么问题……想上面这种除了 CNAME、NS、SOA 没其它项的,估计也问题不大吧……
#2 楼 @flowerwrong 嗯。我发现我访问错地址了。我上面访问的是登录完以后页面里那个 New Role 链接的页面。。。
刚刚我又用全新的虚拟机里面的 Safari 试了一下: 1) 先访问 http://203.195.169.138/articles/new -浏览器跳转到登录页面 2) 登录 -浏览器跳转到 http://203.195.169.138/roles 页面 3) 在地址栏再次输入 http://203.195.169.138/articles/new -浏览器如 #2 楼 的图一样,正常显示了富文本编辑器
所以 @flowerwrong 如果楼主你后来没改什么的话,不会也是访问错 URL 了吧……
我访问的结果是无论怎么刷新都没有 kindeditor
页面里的 js 是:http://203.195.169.138/assets/application-442198d369fc365e53bc3c6a0fa927d8.js 里面也没看到相关的东西。