开源项目 weapon,为已有项目,配置 mina 部署,i18n 定制,rails_settings_ui

seaify · 2015年07月04日 · 最后由 seaify 回复于 2015年08月25日 · 6156 次阅读
本帖已被管理员设置为精华贴

简介

原帖是写了一个rails application template,但后来发现,rails new myapp -m xx.rb 这种形式,并不方便使用,以及不方便已有项目使用,于是将其改造成了weapon,一个 gem 包,可以自由去选择为已有项目添加什么样的功能。

安装和使用

安装方法:gem install 或者添加到 gemfile

gem install weapon
chuck@chuck-MacBook-Pro:~/seaify/weapon(master|) % weapon                                                                                        
Commands:
  weapon create_gem          # create basic gem information
  weapon custom_i18n         # custom i18n and use slim as template engine, use simple_form, currently write to zh-CN.yml
  weapon for_seaify          # only for seaify personal use, combine of other commands act as rails application template
  weapon help [COMMAND]      # Describe available commands or one specific command
  weapon install_must_gems   # install must need gems like guard, guard-livereload, guard-rspec...
  weapon push_to_github      # push to github
  weapon setup_mina_unicorn  # setup mina deploy and unicorn server
  weapon setup_settings_ui   # setup settings ui

weapon setup_mina_unicorn

根据提示输入用户名,主机,路径等信息后,会生成 unicorn 需要使用到的 nginx 文件,并且上传到服务器的/etc/nginx/sites-enable 目录中 执行完,mina ssh, mina deploy, mina console,mina logs, mina unicorn_logs, mina unicorn:restart 这些就都能正常工作了

weapon create_gem

执行 weapon create_gem xxyy, 将会在本地生成一个目录 xxyy, 其中包含 gem 的基本信息,并且会推送到 github 上,而且会自动发布到 rubygems 上。目前 magicfile 这个 gem 的 0.0.1,就是这样生成的。

weapon install_must_gems

执行上述命令后,会将我认为必须的一些列 gem 安装到当前的 rails 环境中。

weapon custom_i18n

执行 weapon custom_i18n 后,会有个错误,需要再手动执行下 rails g simple_form:install --bootstrap,这个神奇的问题,顺便在此寻求各位大神帮助!!!

Use `bundle show [gemname]` to see where a bundled gem is installed.
         run  rm app/assets/stylesheets/application.css from "."
         run  rails g simple_form:install --bootstrap from "."
Could not find generator 'simple_form:install'. Maybe you meant 'integration_test' or 'active_record:model' or 'resource_route'
Run `rails generate --help` for more options.
      create  lib/templates/slim/scaffold/_form.html.slim
      create  lib/templates/slim/scaffold/index.html.slim
      create  lib/templates/slim/scaffold/new.html.slim
      create  lib/templates/slim/scaffold/edit.html.slim
      create  lib/templates/slim/scaffold/show.html.slim
      create  lib/templates/rails/i18n_scaffold_controller/controller.rb
      create  lib/generators/rails/i18n_scaffold_controller/i18n_scaffold_controller_generator.rb
      insert  config/application.rb
         run  rails g simple_form:install --bootstrap from "."
Could not find generator 'simple_form:install'. Maybe you meant 'integration_test' or 'active_record:model' or 'resource_route'
Run `rails generate --help` for more options.

安装后,执行 rails g scaffold post title:string, 会自动的向 config/locales/zh-CN.yml 中写入,会把 model 中的 attribute,自动写入,按 activerecord:attribute:model:field 这种格式

chuck@website:~/tmp/what(master|) % rails g scaffold post title:string                                                                                 
      invoke  active_record
      create    db/migrate/20150717051311_create_posts.rb
      create    app/models/post.rb
      invoke    test_unit
      create      test/models/post_test.rb
      create      test/fixtures/posts.yml
      invoke  resource_route
       route    resources :posts
      invoke  i18n_scaffold_controller
      create    app/controllers/posts_controller.rb
      invoke    slim
      create      app/views/posts
      create      app/views/posts/index.html.slim
      create      app/views/posts/edit.html.slim
      create      app/views/posts/show.html.slim
      create      app/views/posts/new.html.slim
      create      app/views/posts/_form.html.slim
      invoke    test_unit
      create      test/controllers/posts_controller_test.rb
      invoke    helper
      create      app/helpers/posts_helper.rb
      invoke      test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/posts.coffee
      invoke    scss
      create      app/assets/stylesheets/posts.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss
chuck@website:~/tmp/what(master|) % cat config/locales/zh-CN.yml                                                                                 
---
zh-CN:
  action:
    back: "返回"
    new: "创建"
    show: "查看"
    edit: "编辑"
    delete: "删除"
    confirm_delete: "确认删除"
    created:
      successfully: "创建成功"
    updated:
      successfully: "更新成功"
    destroyed:
      successfully: "删除成功"
  activerecord:
    models:
      post: post
    attributes:
      post:
        title: title
        id: ID
        created_at: "创建时间"
        updated_at: "更新时间"
  helpers:
    submit:
      post:
        create: "创建"
        update: "更新"

同时创建的.html.slim 页面都已经使用了 i18n, 包括 new, edit 这些 action,在 controller 里,返回的 notice 也进行了 i18n.

其它

  1. weapon setup_settings_ui, 执行完后,访问http://localhost:3000/settings,就能去设置更新变量了
  2. weapon push_to_github, 执行完后,将当下的代码 push 到 github 上去。不用跑到 github 手动创建 repo

:plus1: :plus1: :plus1:,chuck,你是我们团队提高效率的典范,有你团队效率提高迅速

@lyfi2003 @caiqinghua

现在支持 mina 部署了,会提示输入用户名,host 名,目录名,并能创建到 github

我过去做过一个 rails3.2 下的 skeleton https://github.com/jasl/a_rails_start_up_omakase 不过已经很久没有更新了

#4 楼 @jasl 嗯。看了这个 repo,你的 startup,要更加细化一些。而我这儿的,登陆系统,设置页面,i18n, mina 自动部署,自动建立 github,针对的要更加通用一些。

觉得这条,根据 application.yml 生成 nginx、logrotate、init.d、monit 配置文件,挺好的。

github 那个 md 有序列表每项要回车一行,还有表格也是。。。神麻烦

#6 楼 @dandananddada

感觉 github 默认的那个 markdown 语法,还是需要改进下,不少编辑器的 markdown 要更好,还能画流程图。

mac 上的一些编辑器,同样的 md 文件,在 github 里和编辑器里就是不一样,神烦。编辑的时候很 nice,推上去就发现显示有问题。fuck。

求推荐和 github markdown 语法完全一直的编辑器,需要支持实时预览,以及 vim 编辑模式。vim 插件的方法我知道就不要推荐了

顶一下楼主的东西,不过实际试了一下,rails new myapp --skip --skip-bundle -m yourfile, 然后说缺 terminal-table,装了,然后说缺 term-ansicolor,装了,然后说缺 rspec-support, 然后说缺 listen,然后我就不弄了,等有空弄新项目的时候弄。

#7 楼 @seaify 我平时编辑 md 用的马克飞象,可以和印象笔记同步的,单纯为了实现和 github 排版相同预览的话,Sublime 有个插件叫 Markdown Preview,预览的时候可选择 Github 选项,效果和 Github 那边是一样的。不过我现在被逼无奈已经习惯性各种换行了。。。所以就不用 Sublime 加插件的形式了。。。

#9 楼 @femto

你就耐心等待下 bundle install 哈, --skip --skip-bundle 这个去掉是正常的。

如果 rails new myapp -m https://raw.githubusercontent.com/seaify/rails-application-templates/master/composer.rb 报错的话,欢迎在https://github.com/seaify/rails-application-templates 提个 issue 哈

@seaify 我是已有项目哈,所以加上 --skip --skip-bundle 哈

#12 楼 @femto ok,懂了。我后面更新下,支持已有项目,添加这些功能的办法。

@rei 下载了 atom editor 试用,发现还是和 github markdown 不一致,同样的 md 文件,在 atom 中也显示的很好,github 里列表都显示是 1, 啊。github 在搞飞机啊。

#14 楼 @seaify 你把这段源码发上来看看。

这也要怪 markdown 有很多行为没官方定义。

#16 楼 @seaify 列表和列表内容的结构要改成这样:

1. 列表标题

   列表内容

2. 列表标题

   列表内容

3. 列表标题

   列表内容

注意空行和内容前的空格。

#17 楼 @rei

非常感谢。之前用过的编辑器,可能都对 markdown 语法细节上做过些优化,没注意到需要这样写。

#17 楼 @rei

尝试编辑的时候,发现那如果列表内容,插入了一段 ruby 内容,空格怎么处理呢,不是一段文本?

另外我觉得,很多编辑器都能正常显示,不需要空行和内容前的空格。那实际上 ruby-china 的 markdown 处理的时候,也能支持到这样吧。

如果时间较多的话,能否给那个 readme.md,提个 pr, 我看下你是怎么改的。另外 h3 下的链接也会显示有问题,不在 h3 后面,就正常

#19 楼 @seaify 这种标记语言对空格和空行都是很敏感的,我打开你的源码看到 block 和 block 粘在一起就感觉不好了。

原生 makrdown 已经定义了多行 list 的写法,包括多行和带代码的情况,读一读 http://daringfireball.net/projects/markdown/syntax#list

不过原生 markdown 没有三 ` 的用法,是 GFM 添加的。

Ruby China 的 Markdown 也不标准,我也不知如何挽救。

我个人写文章的时候会用 AsciiDoctor,语法更清晰,实现更统一。

#20 楼 @rei 列表用 markdown 一直很头疼...

mark 一下

#22 楼 @isaaczeng 呀。你也来混 ruby 了,好久不见哈。

#23 楼 @seaify 操,这都被认出来了。来跟你学 ruby。:-)

#12 楼 @femto 这个项目,已经更新了,已 gem 的形式出现,gem install weapon 后,weapon custom_i18n 就可以体验了。 @rei 请教大神问题, 这个 gem 是使用 thor 的,怎样去用 rails application template 中的 gem, generator 这些函数呢? 在 thor 里,我怎样去获取,当期 rails 项目下的配置信息呢,比如我想知道设置了哪些 locales?

#25 楼 @seaify

之前问过这样两个问题,现在自己来解答下。

  1. gem, route 这些函数写在 Rails::Generators::Actions 这个 module 中,所以直接 include,就可以了。
require 'thor'
require 'awesome_print'
require 'rails'
require 'rails/generators/actions'
require 'fileutils'

class Weapon < Thor
  include Thor::Actions
  include Rails::Generators::Actions
  1. thor 里获取 rails 的配置信息 rails 的这些运行时信息,配置信息,是 rails 整个项目初始化后,才有的信息。而 rails 之外的这些命令是读取不到这些信息的。 可行的办法是,将自己注入到 rails 中,目前看来就是生成 generator,再以 rails g generator 这种形式去运行,如 ruby rails g grape_entity generate_entity program

rails 很好的地方在于,我们可以很方便的按照自己想要的方式去写代码,偷懒。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号