#如何将 Rails 应用程序部署到 VPS 上
如果已经在 VPS 上假设好了 Rails 生产环境,接下来就可以将部署应用程序了。
###需要用到的工具
| class Lisp | |
| def initialize | |
| @env = { | |
| :label => lambda { |(name,val), _| @env[name] = val }, | |
| :quote => lambda { |sexpr, _| sexpr[0] }, | |
| :car => lambda { |(list), _| list[0] }, | |
| :cdr => lambda { |(list), _| list.drop 1 }, | |
| :cons => lambda { |(e,cell), _| [e] + cell }, | |
| :eq => lambda { |(l,r), _| l == r }, | |
| :if => lambda { |(cond, thn, els), ctx| eval(cond, ctx) ? eval(thn, ctx) : eval(els, ctx) }, |
#如何将 Rails 应用程序部署到 VPS 上
如果已经在 VPS 上假设好了 Rails 生产环境,接下来就可以将部署应用程序了。
###需要用到的工具
| # From http://www.mattsears.com/articles/2011/11/27/ruby-blocks-as-dynamic-callbacks | |
| class Proc | |
| def callback(callable, *args) | |
| self === Class.new do | |
| method_name = callable.to_sym | |
| define_method(method_name) { |&block| block.nil? ? true : block.call(*args) } | |
| define_method("#{method_name}?") { true } | |
| def method_missing(method_name, *args, &block) false; end | |
| end.new |
| module Rubber | |
| def self.try(diftimes = [3, 8, 2], options = { }, &block) | |
| val = timeout(diftimes.shift) do | |
| block.call | |
| end | |
| rescue options[:on] || Exception => e | |
| Rails.logger.info("#{Time.now}:#{__FILE__}:#{__LINE__}}:#{e.backtrace.join("\n")}") | |
| retry if diftimes.first | |
| return "" |