共有11篇文章被收藏推荐
收录于2007-07-12
认领
报错
推荐
这个问题由来已久,比较了一下几种现有的解决方案,最后发现Robert Bousquet的方案是最简单的。
1. Robert只提供了一个源码下载链接,不是很方便,我将它放到了github上:
$ script/plugin install git://github.com/yzhang/smtp_tls.git
2. 修改environment.rb:
require "smtp_tls"
mailer_config = File.open("#{RAILS_ROOT}/config/mailer.yml")
mailer_options = YAML.load(mailer_config)
ActionMailer::Base.smtp_settings = mailer_options
3. 建立config/mailer.yml
—
:address: smtp.gmail.com
:port: 587
:user_name: john@doe.com
:password: s1j234gh
:authentication: :plain
4. 如果你使用了ExceptionNotification插件,那么你需要确保ExceptionNotification的发件人设置与你的Gmail帐户相符,否则GMail将会拒绝发送。
capistrano是目前最为流行的Rails部署工具,不过一旦进入产品阶段,我们可能希望在部署时显示一个“站点正在维护中”的页面,而不是正在升级中的应用,当前版本(2.5)的capistrano提供了两个内置任务来完成这一工作,它们就是deploy:web:disable和 deploy:web:enable,如果你仔细查看capistrano的部署目录,会在current/public目录下发现一个system目录,它是一个指向shared/system的链接,因此我们首先需要在shared目录下建立system目录,capistrano使用它来存放维护页面。
server$ mkdir deploy/shared
现在如果我们执行cap deploy:web:disable,capistrano会通过sftp上传一个默认的站点维护页面到shared/system /maintenance.html,而deploy:web:enable则会将这个页面删除,但是这个任务本身并不能将应用屏蔽掉,我们需要修改前端服务器的rewrite规则。
如果你使用nginx,那么加入下面几行到你的nginx.conf:
server {
root /current/deploy/path/public;
if (-f $document_root/system/maintenance.html) {
set $maintenance 1;
}
if ($request_uri ~* (jpg|jpeg|gif|js|css)$) {
set $maintenance 0;
}
if ($maintenance) {
rewrite ^(.*)$ /system/maintenance.html last;
break;
}
location / {
....
这样nginx会首先判断维护页面是否存在,如果存在,则将所有清除都转向维护页面,如果使用apache,则需要修改.htaccess(未验证):
RewriteCond %{REQUEST_URI} !\.(css|jpg|js|gif|png)$
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /system/maintenance.html [L]
如果你想要这一切自动进行,那么你可以将这两个任务加入deploy任务:
namespace :deploy do
desc "Default deploy will update the code without migrate the database and restart the servers"
task :default do
# put up the maintenance screen
web.disable
transaction do
update_code
symlink
copy_configs
end
restart
# remove the maintenance screen
web.enable
end
end
如果你想要自定义维护页面,可以通过覆盖默认的deploy:web:disable任务实现:
namespace :deploy do
namespace :web do
task :disable do
on_rollback { delete "#{shared_path}/system/maintenance.html" }
require 'rubygems'
require 'haml'
template = File.read("./app/views/layouts/maintenance.html.haml")
haml = Haml::Engine.new(template)
maintenance = haml.render(Object.new,
:deadline => ENV['UNTIL'],
:reason => ENV['REASON'])
put maintenance, "#{shared_path}/system/maintenance.html",
:mode => 0644
end
end
end
这段代码渲染了layouts/maintenance.html.haml,你可以根据自己的需要定义它,这里我们传入了两个变量,一个指定原因,一个指定恢复时间:
%h1
We're currently down for
= reason ? reason : "maintenance"
as of
= Time.now.strftime("%H:%M %Z")
%p
Sorry for the inconvenience. We'll be back
= deadline ? "by #{deadline}" : "shortly"
Please email us if you need to get in touch.
你可以在执行deploy:web:disable之前设定这两个变量:
UNTIL=”16:00 MST” REASON=”a database upgrade” cap disable_web
参考:
现场照片:
PPT:
- Role based Permission
- 重构你的应用从1.2到2.0
- open social ,不过和Google的OpenSocial没啥关系,其实是关于‘编码劳模如何挣钱’,引起现场骚动
特别感谢Recity的Vebram,为我们摄制了视频,以及我的同事Stephen连夜上传。
互联网让记者这个职业变得没有门槛,只要愿意,任何人都可以成为网络记者,尤其是网络技术记者,你甚至都不需要与采访人见面,只需准备一些问题,然后去封邮件就OK了,当然被采访人一般都会很繁忙,因此要让你的邮件脱颖而出得到回答,你就需要多提些有趣的问题,没有有趣的问题?那也没关系, Joseph Wilk为你准备了一个采访Ruby/Rails牛人的问题清单,你只要照着问就可以了,以下就是他列出的9个问题:
- 如果有一架无人驾驶客机,并且它的控制系统是由Rails编写的,现在有机会来抢先体验它,那么您会选择它作为你的出行工具吗?为什么?
- 尽管Ruby很强大,但它也不过是个脚本语言而已,并且对于真正的产品来说,它显得过于动态和黑客化,我的问题就是,为什么要抱怨Ruby继承了许多Perl的缺点并且缺乏国际化支持,而不去试试Python呢?
- Ruby采用了一种独特的方式解决了多重继承(multiple inheritance)的问题,您能解释下这种方式的优点和缺点吗?
- 您认为向Ruby的Builtin Class中注入method值得推广吗?请顺被给出一些实例来佐证您的观点
- 您能解释下为何nil.object_id等于4吗?
>> nil.object_id
=> 4 - Twitter是目前比较流行的使用Rails构建的网站,您对Twitter选择Rails怎么看?
- 您能解释下has_many的运行机制吗?
- 如果有一个完全使用script/generate scaffold 构建的网站,那么,如果你向‘/images/1′发送一个POST请求,将会发生什么情况?
- 如果每种语言都可以用一个人来表示,那么你觉得它们分别会是什么样的人,为什么?(Ruby Person,Python Person,Java Person,PHP Person)
仅供参考,后果自负。
活动时间及地点
日期:7月26号
时间:下午1:00 - 5:00
地址:中山西路1515号大众大厦15楼1号会议室(徐虹中路与中山西路路口)
乘车路线:
地铁4号线宜山路站下,4号口出,沿徐虹中路步行100米到中山西路即可看到
公交及自驾路线推荐使用谷歌地图
活动演讲者及主题
- Eric sun, Role based Permission,http://www.trikr.com/
- Quake Wang, 重构你的应用- 从rails 1.x到2.x, http://www.javaeye.com
- 李大维, 校内,51.com和淘宝开放平台的RoR函数库,42friends.com。
- Sting, OpenSocial简介,和家网(51hejia.com) CTO
更多详情请访问Shanghai on Rails论坛:http://groups.google.com/group/shanghaionrails
![]()
-
搜索不到您的频道?
>立即加入 -
想与您的读者互动?快来认领您的频道
>立即认领 -
想知道您的博客详细订阅数据么?
>到FeedSky查看 -
想体验专业的博客托管服务么?
>注册BlogBus


