redmine 学习记录

本文详细记录了redmine的安装过程,包括从GitHub获取源码和插件使用。同时,介绍了redmine的权限定义方式,展示了在./lib/redmine.rb文件中的权限设置。此外,通过分析代码,解释了redmine中控制器、视图和模型的工作原理,以及如何读取关联数据。文章最后提到了redmine的配置选项,如邮件发送设置,并以使用gmail为例进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、安装redmine

https://github.com/redmine/redmine

2、插件使用

http://redmine.ossxp.com/redmine/projects/redmine/wiki/%E4%B8%80%E6%AD%A5%E4%B8%80%E6%AD%A5%E5%BC%80%E5%8F%91Redmine%E6%8F%92%E4%BB%B6%E7%9A%84%E6%95%99%E7%A8%8B

3、帮助菜单的代码位置 

./lib/redmine/info.rb

def help_url; 'http://www.redmine.org/guide' end

./lib/redmine.rb

menu.push :help, Redmine::Info.help_url, :last => true

其他菜单也在这里可以看到

如可以通过注释

#  menu.push :ldap_authentication, {:controller => 'auth_sources', :action => 'index'},
#            :html => {:class => 'server_authentication'}

屏蔽管理菜单中的LDAP菜单

4、权限定义

权限定义也在./lib/redmine.rb文件中

  map.project_module :files do |map|
    map.permission :manage_files, {:files => [:new, :create], :attachments => :upload}, :require => :loggedin
    map.permission :view_files, {:files => :index, :versions => :download}, :read => true
  end

定义一组权限,在角色权限分配中可以看到。

插件开发时可以在自己的插件中定义相关权限和菜单。

redmine的用户分为管理员用户和非管理员用户,管理员用户可以管理所有项目,非管理员用户和项目相关连

5、代码阅读

redmine有很多页面,开始不知道从哪里入手

找到最简单的页面,查看路由文件后,

从get 'robots.txt', :to => 'welcome#robots' 入手

a、控制器代码

def robots
    @projects = Project.all_public.active
    render :layout => false, :content_type => 'text/plain'
  end

大概意思是取出活动的,公开的project信息

不使用框架,设置文档类型。

使用到模型中的all_public.active等方法,现在理解应该为类方法。

b、视图代码

User-agent: *
<% @projects.each do |p| -%>
Disallow: /projects/<%= p.to_param %>/repository
Disallow: /projects/<%= p.to_param %>/issues
Disallow: /projects/<%= p.to_param %>/activity
<% end -%>
Disallow: /issues/gantt
Disallow: /issues/calendar
Disallow: /activity
Disallow: /search

显示一些固定内容,如果有项目信息,显示项目相关的行,

使用到to_oaram这个对象方法。

c、模型代码

查看./app/model/project.rb

def to_param
    # id is used for projects with a numeric identifier (compatibility)
    @to_param ||= (identifier.to_s =~ %r{^\d*$} ? id.to_s : identifier)
  end

scope :active, lambda { where(:status => STATUS_ACTIVE) }

scope :all_public, lambda { where(:is_public => true) }

这里用到闭包表达式lambda。

另外看到这样的代码

 has_many :memberships, :class_name => 'Member'
 has_many :member_principals,
           lambda { joins(:principal).
                    where("#{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}")},
    :class_name => 'Member'

has_and_belongs_to_many :trackers, lambda {order(:position)}

可以从对象方法中调用:memberships等方法,可以直接读出来

这个也是我之前想找的读取关联数据的方法,看来redmine代码中还是能发现不少金矿的。

除了lambda外,还发现class_name,dependent,through,source,等字样,需要慢慢琢磨是什么意思。


match 'account/register', :to => 'account#register', :via => [:get, :post], :as => 'register' 

a、控制器代码片段

if request.get?
      session[:auth_source_registration] = nil
      @user = User.new(:language => current_language.to_s)

b、视图代码

l(:label_register) 按照用户设置的语言显示该语言的字符串

<%= labelled_form_for @user, :url => register_path do |f| %>

<% unless @user.force_default_language? %>
<p><%= f.select :language, lang_options_for_select %></p>
<% end %>

c、模型代码

“?”被用于标示谓词,即返回Boolean直的方法,如Array.empty?(判断数组中元素是否为空)
“!”出现在方法名尾部的感叹号表明使用该方法是需要多加小心。许多Ruby的核心类都定义了
成对的方法,它们具有同样的名称,只是结尾相差一个“!”,通常情况下,不带感叹号的方法返
调用该方法的一个拷贝,二带感叹号的方法则是一个可变方法,该方法会修改原来的对象,如Array
类中的sort和sort!

settings配置项

目前看到的配置项有

login_required

self_registration

default_language

等,全局配置,在代码中作为开关可用


邮件发送配置使用gmail邮箱

在configration.yml中设置

      delivery_method: :smtp
      smtp_settings:
        enable_starttls_auto: true
        address: "smtp.gmail.com"
        port: 587
        domain: "smtp.gmail.com"
        authentication: :plain
        user_name: "xx@gmail.com"
        password: "passwd"

然后就可以使用自动邮件发送的功能了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值