Last active
November 9, 2020 06:44
Revisions
-
zhangyuan revised this gist
Mar 27, 2014 . 1 changed file with 2 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -73,6 +73,8 @@ gem 'better_errors' end run "bundle" run "cp config/database.yml config/database.yml.example" generate("rails_config:install") -
zhangyuan revised this gist
Mar 27, 2014 . 1 changed file with 2 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,4 @@ # encoding: utf-8 git :init remove_file ".gitignore" @@ -116,7 +117,7 @@ gzip_http_version 1.1; gzip_vary on; gzip_comp_level 6; gzip_disable "MSIE [1-6].(?!.*SV1)"; location / { proxy_set_header Host $host; -
zhangyuan revised this gist
Feb 24, 2014 . 1 changed file with 0 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -55,7 +55,6 @@ gem 'kaminari-bootstrap', '~> 3.0.1' gem 'capistrano', '~> 3.0.1', require: false gem 'capistrano-bundler', require: false gem_group :development, :test do gem 'rspec-rails' -
zhangyuan created this gist
Jan 26, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,611 @@ git :init remove_file ".gitignore" file '.gitignore', <<-IGNORE *.rbc *.sassc .sass-cache capybara-*.html .rspec /log /tmp /db/*.sqlite3 /public/system /coverage/ /spec/tmp **.orig rerun.txt pickle-email-*.html config/secrets.yml ## Environment normalisation: /.bundle /vendor/bundle # these should all be checked in to normalise the environment: # Gemfile.lock, .ruby-version, .ruby-gemset *.swo *.swp db/schema.rb config/settings.local.yml config/settings/*.local.yml config/environments/*.local.yml public/uploads/ config/database.yml public/assets config/unicorn.rb config/nginx.conf config/unicorn_init /tags IGNORE remove_file "app/assets/images/rails.png" gem 'slim-rails' gem 'rails_config' gem 'carrierwave' gem 'mini_magick' gem 'unicorn', require: false gem 'kaminari-bootstrap', '~> 3.0.1' gem 'capistrano', '~> 3.0.1', require: false gem 'capistrano-bundler', require: false gem 'jbuilder' gem_group :development, :test do gem 'rspec-rails' gem 'factory_girl_rails' end gem_group :assets do gem 'bootstrap-sass', '~> 3.0.3.0' gem 'compass-rails' end gem_group :development do gem 'thin' gem 'quiet_assets' gem 'better_errors' end run "cp config/database.yml config/database.yml.example" generate("rails_config:install") generate("rspec:install") environment %q(config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/workers/)) environment %q(config.time_zone = 'Beijing') environment %q(config.active_record.default_timezone = :local) environment %q(config.active_record.time_zone_aware_attributes = false) environment %q(config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]) environment %q(config.i18n.default_locale = 'zh-CN') environment %q(config.action_controller.include_all_helpers = false) remove_file ".rspec" file ".rspec", <<-RSPEC --color --format documentation RSPEC run "bundle exec cap install" uncomment_lines "Capfile", /require.*capistrano\/bundler/ file 'config/nginx.conf.example', <<-NGINX upstream #{app_name}_unicorn_server { server unix:/tmp/#{app_name}.sock fail_timeout=0; } server { listen 80; server_name www.example.com; client_max_body_size 5M; root /home/deployer/apps/#{app_path}/current/public; location ~ ^/(assets)/ { gzip_static on; # to serve pre-gzipped version expires max; add_header Cache-Control public; } gzip on; gzip_http_version 1.1; gzip_vary on; gzip_comp_level 6; gzip_disable “MSIE [1-6].(?!.*SV1)”; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering on; if (!-f $request_filename) { proxy_pass http://#{app_name}_unicorn_server; break; } } access_log /home/deployer/apps/#{app_name}/shared/log/access.log; error_log /home/deployer/apps/#{app_name}/shared/log/error.log; } NGINX file "config/unicorn.rb.example", <<-UNICORN # -*- encoding : utf-8 -*- worker_processes 3 timeout 30 listen File.expand_path("/tmp/#{app_name}.sock"), :backlog => 64 preload_app true pid File.expand_path('../../tmp/pids/unicorn.pid', __FILE__) before_exec do |server| ENV["BUNDLE_GEMFILE"] = File.expand_path('../../Gemfile', __FILE__) end before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! defined?(Redis) and Redis.current.client.disconnect old_pid = "\#{server.config[:pid]}.oldbin" if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection defined?(Redis) and Redis.current.client.reconnect end UNICORN file "config/unicorn_init.example", <<-INIT #!/bin/sh ### BEGIN INIT INFO # Provides: unicorn_#{app_name} # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Manage unicorn server # Description: Start, stop, restart unicorn server for a specific application. ### END INIT INFO set -e # Feel free to change any of the following variables for your app: TIMEOUT=${TIMEOUT-60} APP_ROOT=/home/deployer/apps/#{app_name}/current PID=$APP_ROOT/tmp/pids/unicorn.pid CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" AS_USER=deployer set -u OLD_PIN="$PID.oldbin" sig () { test -s "$PID" && kill -$1 `cat $PID` } oldsig () { test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` } run () { if [ "$(id -un)" = "$AS_USER" ]; then eval $1 else su -c "$1" - $AS_USER fi } case "$1" in start) sig 0 && echo >&2 "Already running" && exit 0 run "$CMD" ;; stop) sig QUIT && exit 0 echo >&2 "Not running" ;; force-stop) sig TERM && exit 0 echo >&2 "Not running" ;; restart|reload) sig HUP && echo reloaded OK && exit 0 echo >&2 "Couldn't reload, starting '$CMD' instead" run "$CMD" ;; upgrade) if sig USR2 && sleep 2 && sig 0 && oldsig QUIT then n=$TIMEOUT while test -s $OLD_PIN && test $n -ge 0 do printf '.' && sleep 1 && n=$(( $n - 1 )) done echo if test $n -lt 0 && test -s $OLD_PIN then echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" exit 1 fi exit 0 fi echo >&2 "Couldn't upgrade, starting '$CMD' instead" run "$CMD" ;; reopen-logs) sig USR1 ;; *) echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" exit 1 ;; esac INIT remove_file "config/deploy.rb" file "config/deploy.rb", <<-DEPLOY set :application, '#{app_name}' # set :repo_url, '' # ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp } set :user, 'deployer' set :use_sudo, false set :deploy_to, "/home/\#{fetch :user}/apps/\#{fetch :application}" set :scm, :git set :format, :pretty set :log_level, :debug set :pty, true set :linked_files, %w{ config/settings.local.yml config/database.yml config/unicorn.rb config/unicorn_init config/nginx.conf } set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads} set :default_env, { path: "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" } set :keep_releases, 5 remote_file "config/settings.local.yml" => "config/settings.local.yml.example" remote_file "config/database.yml" => "config/database.yml.example" remote_file "config/unicorn.rb" => "config/unicorn.rb.example" remote_file "config/unicorn_init" => "config/unicorn_init.example" remote_file "config/nginx.conf" => "config/nginx.conf.example" namespace :deploy do namespace :check do task :linked_files => fetch(:linked_files) end desc "precompile asseets and sync to web server" task :assets_sync do system('bundle exec rake assets:precompile') on roles(:web) do |server| system "rsync -vr --exclude='.DS_Store' public/assets \#{fetch :user}@\#{server}:\#{release_path}/public/" end system('rm -rf public/assets') end desc "rake db:migrate" task :db_migrate do on roles(:db) do execute "cd \#{release_path} && bundle exec rake db:migrate RAILS_ENV=production" end end after 'deploy:updated', 'deploy:db_migrate' after 'deploy:updated', 'deploy:assets_sync' desc "Start application" task :start do on roles(:app) do execute "cd \#{deploy_to}/current && bundle exec unicorn_rails -c config/unicorn.rb -E production -D" end end desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do execute "kill -s USR2 `cat \#{deploy_to}/current/tmp/pids/unicorn.pid`" end end desc 'Stop application' task :stop do on roles(:app), in: :sequence, wait: 5 do execute "kill -s QUIT `cat \#{deploy_to}/current/tmp/pids/unicorn.pid`" end end after :finishing, 'deploy:cleanup' end DEPLOY remove_file "public/index.html" remove_file "app/views/layouts/application.html.erb" file "app/views/layouts/application.html.slim", <<-LAYOUT doctype html html lang="zh_CN" head meta charset="utf-8" meta http-equiv="X-UA-Compatible" content="IE=edge" meta name="viewport" content="width=device-width, initial-scale=1.0" = csrf_meta_tags = stylesheet_link_tag "application" = javascript_include_tag "application" = yield :header title #{app_name} body .navbar.navbar-inverse.navbar-fixed-top role="navigation" .container .navbar-header button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse" span class="sr-only" Toggle navigation span class="icon-bar" span class="icon-bar" span class="icon-bar" .navbar-collapse.collapse = link_to 'Home', '/', class: 'navbar-brand' .row - if flash[:notice] .win-row .alert.alert-info= flash[:notice] - if flash[:alert] .win-row .alert.alert-danger= flash[:alert] .col-md-3 = yield :left .col-md-9 = yield .row LAYOUT remove_file "app/assets/stylesheets/application.css" file "app/assets/stylesheets/application.css.scss", <<-APPLICATION @import "bootstrap"; @import "bootstrap/theme"; body { position: relative; padding-top: 50px; } APPLICATION remove_file "app/assets/javascripts/application.js" file "app/assets/javascripts/application.js", <<-APPLICATION //= require jquery //= require jquery_ujs APPLICATION file "config/locales/zh-CN.yml", <<-I18N zh-CN: date: abbr_day_names: - 日 - 一 - 二 - 三 - 四 - 五 - 六 abbr_month_names: - - 1月 - 2月 - 3月 - 4月 - 5月 - 6月 - 7月 - 8月 - 9月 - 10月 - 11月 - 12月 day_names: - 星期日 - 星期一 - 星期二 - 星期三 - 星期四 - 星期五 - 星期六 formats: default: ! '%Y-%m-%d' long: ! '%Y年%b%d日' short: ! '%b%d日' month_names: - - 一月 - 二月 - 三月 - 四月 - 五月 - 六月 - 七月 - 八月 - 九月 - 十月 - 十一月 - 十二月 order: - :year - :month - :day datetime: distance_in_words: about_x_hours: one: 大约一小时 other: 大约 %{count} 小时 about_x_months: one: 大约一个月 other: 大约 %{count} 个月 about_x_years: one: 大约一年 other: 大约 %{count} 年 almost_x_years: one: 接近一年 other: 接近 %{count} 年 half_a_minute: 半分钟 less_than_x_minutes: one: 不到一分钟 other: 不到 %{count} 分钟 less_than_x_seconds: one: 不到一秒 other: 不到 %{count} 秒 over_x_years: one: 一年多 other: ! '%{count} 年多' x_days: one: 一天 other: ! '%{count} 天' x_minutes: one: 一分钟 other: ! '%{count} 分钟' x_months: one: 一个月 other: ! '%{count} 个月' x_seconds: one: 一秒 other: ! '%{count} 秒' prompts: day: 日 hour: 时 minute: 分 month: 月 second: 秒 year: 年 errors: &errors format: ! '%{attribute}%{message}' messages: accepted: 必须是可被接受的 blank: 不能为空字符 confirmation: 与确认值不匹配 empty: 不能留空 equal_to: 必须等于 %{count} even: 必须为双数 exclusion: 是保留关键字 greater_than: 必须大于 %{count} greater_than_or_equal_to: 必须大于或等于 %{count} inclusion: 不包含于列表中 invalid: 是无效的 less_than: 必须小于 %{count} less_than_or_equal_to: 必须小于或等于 %{count} not_a_number: 不是数字 not_an_integer: 必须是整数 odd: 必须为单数 record_invalid: ! '验证失败: %{errors}' taken: 已经被使用 too_long: 过长(最长为 %{count} 个字符) too_short: 过短(最短为 %{count} 个字符) wrong_length: 长度非法(必须为 %{count} 个字符) template: body: 如下字段出现错误: header: one: 有 1 个错误发生导致「%{model}」无法被保存。 other: 有 %{count} 个错误发生导致「%{model}」无法被保存。 helpers: select: prompt: 请选择 submit: create: 新增%{model} submit: 储存%{model} update: 更新%{model} number: currency: format: delimiter: ! ',' format: ! '%u %n' precision: 2 separator: . significant: false strip_insignificant_zeros: false unit: CN¥ format: delimiter: ! ',' precision: 3 separator: . significant: false strip_insignificant_zeros: false human: decimal_units: format: ! '%n %u' units: billion: 十亿 million: 百万 quadrillion: 千兆 thousand: 千 trillion: 兆 unit: '' format: delimiter: '' precision: 1 significant: false strip_insignificant_zeros: false storage_units: format: ! '%n %u' units: byte: one: Byte other: Bytes gb: GB kb: KB mb: MB tb: TB percentage: format: delimiter: '' precision: format: delimiter: '' support: array: last_word_connector: ! ', 和 ' two_words_connector: ! ' 和 ' words_connector: ! ', ' time: am: 上午 formats: default: ! '%Y年%b%d日 %A %H:%M:%S %Z' long: ! '%Y年%b%d日 %H:%M' short: ! '%b%d日 %H:%M' pm: 下午 # remove these aliases after 'activemodel' and 'activerecord' namespaces are removed from Rails repository activemodel: errors: <<: *errors activerecord: errors: <<: *errors I18N git add: "." git commit: %Q{ -m 'Initial commit' }