• 这个问题也困扰我。 这是我目前仍然有效的设定, 若有更好的建议,也请提供。

    在 rc.local 里: su USERNAME -c '/home/USERNAME/bin/start_PROJECT.sh'

    start_PROJECT.sh:

    #!/bin/sh
    APP_ROOT="/home/SITES/PROJECT"
    ENV=production
    GEM_HOME="/home/USERNAME/.rvm/gems/ruby-1.9.3-p125"
    THIN_OPTS="-C /home/SITES/PROJECT/config.yml -R /home/SITES/PROJECT/config.ru start"
    SET_PATH="cd $APP_ROOT; /home/USERNAME/.rvm/bin/rvm use 1.9.3-p125; export GEM_HOME=$GEM_HOME"
    CMD="$SET_PATH; $GEM_HOME/bin/thin $THIN_OPTS"
    su - USERNAME -c "$CMD"
    

    另外一种也有效的是: /etc/rc.local 同上, 但 start_PROJECT.sh 的内容是:

    export LC_CTYPE=en_US.UTF-8
    cd /home/USERNAME/RAILS/PROJECT
    #/home/USERNAME/.rvm/bin/PROJECT-ror_thin start -d
    /home/USERNAME/.rvm/bin/PROJECT-ror_thin start --socket=/tmp/PROJECT.sock -d
    

    而 PROJECT-ror_thin 的内容为:

    #!/usr/bin/env bash
    
    if [[ -s "/home/USERNAME/.rvm/environments/ruby-1.9.3-p392" ]]
    then
      source "/home/USERNAME/.rvm/environments/ruby-1.9.3-p392"
      exec thin "$@"
    else
      echo "ERROR: Missing RVM environment file: '/home/USERNAME/.rvm/environments/ruby-1.9.3-p392'" >&2
      exit 1
    fi
    

    但 linux 系统从 init 换成 systemd 后,就有点问题。

  • 即然用 redis,只要考量怎么设 key, 关联表总会徒增查询的负担。

    $redis = Redis.new doc:1:users 为 set user:1:docs 为 set

    在 controller 里只有辅导者可以执行的动作:

    def doc_to_user(doc,user)
      $redis.multi do
        $redis.sadd "doc:#{doc}:users",user
        $redis.sadd "user:#{user}:docs",doc
      end
    end
    

    在 view 里: 普遍用户里所有的文档 ID: docs = ($redis.smembers "user:#{current_user}:docs") 普遍用户与辅导者的登入,其实切成两个网站就很单纯, 也不需要在数据表上区分身分,又在身分上区分可以做什么动作。

    如果不能区分成两网站,那也只要区分 /user, /admin 两个各为不同的 controller。 如果普遍用户及辅导者一定要在数据表内, 最多在 admin 里指定哪些 user 的登入是有效的, 而不需要在 user 身分上又多出什么身分的区别。