从零开始使用rails组建API
查看创建项目的参数
rails new -h
个人经验使用以下命令
rails new demo -d postures -B -T --skip-webpack-install --skip-turbolinks --skip-javascript --skip-sprockets
config/application.rb
config.time_zone = 'Asia/Shanghai'
config.eager_load_paths += Dir[Rails.root.join('services')]
config.eager_load_paths += Dir[Rails.root.join('lib')]
config.active_job.queue_adapter = :sidekiq
config.active_job.queue_name_prefix = Rails.env
config.active_job.queue_name_delimiter = '_'
Gemfile
gem 'redis', '~> 4.0'
gem 'redis-namespace'
gem 'redis-objects'
gem 'sidekiq'
gem 'sidekiq-scheduler'
gem 'kaminari'
gem 'config'
gem 'rails_param'
gem 'oj'
gem 'rack-cors'
gem 'aasm'
gem 'awesome_print'
gem 'pry-rails'
gem 'exception_notification'
gem 'lograge'
gem 'logstash-event'
gem 'logstash-logger'
gem 'rubocop-rails'
group :development do
gem 'annotate'
end
config/setting.yml
redis:
host: 127.0.0.1
password: password
namespace: demo
port: 6379
queue: 1
cache: 2
object_db: 3
sidekiq_db: 4
expires_in: 3600
执行安装命令
rails g config:install
rails g kaminari:config
rails g exception_notification:install --sidekiq
rails g annotate:install
annotate --models
config/routes.rb
require 'sidekiq/web'
require 'sidekiq-scheduler/web'
Rails.application.routes.draw do
mount Sidekiq::Web, at: '/sidekiq'
root 'home#index'
end
config/initializer/redis.rb
require 'sidekiq/scheduler'
redis_params = {
host: Settings.redis.host,
port: Settings.redis.port,
password: Settings.redis.password,
id: nil
}
$redis = Redis::Namespace.new(
Settings.redis.namespace,
redis: Redis.new(redis_params.merge(db: Settings.redis.queue))
)
Redis.current = Redis::Namespace.new(
Settings.redis.namespace,
redis: Redis.new(redis_params.merge(db: Settings.redis.object_db))
)
Sidekiq.configure_server do |config|
config.redis = redis_params.merge(db: Settings.redis.sidekiq_db)
end
Sidekiq.configure_client do |config|
config.redis = redis_params.merge(db: Settings.redis.sidekiq_db)
end
Sidekiq.configure_server do |config|
config.on(:startup) do
Sidekiq.schedule = YAML.load_file(File.expand_path('../scheduler.yml', __dir__))
Sidekiq::Scheduler.reload_schedule!
end
end
Dockerfile
FROM ruby:2.6.3-alpine3.9
WORKDIR /app
RUN echo "http://mirrors.aliyun.com/alpine/v3.9/main/" | tee /etc/apk/repositories
RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ \
&& bundle config mirror.https://rubygems.org https://gems.ruby-china.com
COPY Gemfile Gemfile.lock ./
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash bash-doc bash-completion build-base tzdata libstdc++ \
&& bundle install --deployment --without development:test:doc \
&& rm -rf /var/cache/apk/*
COPY ./ ./
.rubocop.yml
rubocop --require rubocop-rails -a
require: rubocop-rails
AllCops:
TargetRubyVersion: 2.6.3
Exclude:
- 'config/routes.rb'
- 'tmp/**/*'
- 'db/schema.rb'