顯示具有 redmine 標籤的文章。 顯示所有文章
顯示具有 redmine 標籤的文章。 顯示所有文章

2010年5月10日 星期一

用 apache + mongrel cluster + relative url 跑 Redmine

由於公司防火牆設定問題, 想想還是把 Redmine 跑在 apache 裡共用 port 80, 對大家比較方便。今晚就試了一會兒, 沒想到意外設成功了, 真開心啊!!

我大致上是參考這篇。執行方式是 mongrel 自己跑 web server 聽幾個 port, 再用 apache 跑 proxy, 將特定路徑轉交給 mongrel server。摘要做法如下:
  1. 參考隨便一篇文章在 Ubuntu 上裝好 Redmine, 能用單機 mongrel_rails 執行。
  2. 安裝 mongrel_cluster:
    sudo gem install mongrel_cluster
  3. 設 REDMINE_HOME/config/mongrel_cluster.yml:
    user: www-data
    cwd: REDMINE_HOME
    port: "3000"
    environment: production
    group: www-data
    address: 0.0.0.0
    pid_file: log/mongrel.pid
    servers: 2
  4. 設 Redmine 的相對網址, 在 REDMINE_HOME/config/environments/production.rb 檔案最後加上
    config.action_controller.relative_url_root = '/redmine'
    比起 Django 真是簡單百倍。
  5. 執行 mongrel cluster:
    cd REDMINE_HOME
    mongrel_rails cluster::start
    成功的話會跑在 port 3000 和 3001。沒成功的話可以讀 REDMINE_HOME/log/mongrel.3000.log 了解原因。 REDMINE_HOME 內所有檔案擁有者和群組記得設成 www-data。
  6. 安裝和啟動 apache 需要的 modules
    a2enmod proxy
    a2enmod proxy_http
    a2enmod proxy_balancer
    a2enmod rewrite
    
  7. 設定 apache conf, 我是寫在 /etc/apache2/conf.d/011_redmine.conf 裡:
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    
    <Proxy balancer://redmine_cluster>
    BalancerMember http://YOUR_IP:3000
    BalancerMember http://YOUR_IP:3001
    </Proxy>
    
    ProxyPreserveHost On
    
    <Location "/redmine">
        ProxyPass balancer://redmine_cluster
    
        RewriteEngine On
        # Redirect all non-static requests to cluster
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule ^/(.*)$ balancer://redmine_cluster%{REQUEST_URI} [P,QSA,L]
    </Location>
    
    注意預設 apache proxy 是 deny all, 沒打開 apache error log 會出現 "client denied by server configuration ..."
  8. 執行
    /etc/init.d/apache2 reload

目前沒設 /etc/init.d/mongrel_cluster, 以後有機會再來研究。

2010年4月3日 星期六

在 Ubuntu 8.04 上裝 Redmine 0.9.x

關鍵在於 Redmine 0.9.x 需要 rails 2.3.5, 而 rails 2.3.5 需要 rubygems v1.3.1。但是 Ubuntu 8.04 上的 rubygems 不夠新, 也無法透過 gem 自己昇級 (gem update --system), Ubuntu 會跑出禁止 gem 自己昇級的訊息。之前才讀到《RubyGem is from Mars, AptGet is from Venus》, 想說系統管理和開發者戰得真激烈, 結果馬上就被這場戰爭掃到。

評估了網路上各種解法, 最後決定直接裝 rubygems tarball, 用 gem 裝 rails 2.3.5, 希望之後爛也只會爛 ruby package (我不確定這樣做到底會如何)。

總結安裝流程如下:
  1. 參照這篇裝 Ubuntu 上必要的 package:
    sudo aptitude  install build-essential
    sudo aptitude  install rails rubygems mongrel libmagick9-dev ruby1.8-dev
  2. 直接從原始碼裝 rubygems v1.3.1
  3. 參照 Redmine install 的流程
使用 MySQL 的注意事項:
  • MySQL 資料庫設定檔裡除帳號等資訊外要加一欄 socket:
    production:
      adapter: mysql
      database: redmine
      host: localhost
      username: redmine
      password: my_password
      encoding: utf8
      socket: /var/run/mysqld/mysqld.sock   # Ubuntu's path
    
  • rake migrate 會出現錯誤訊息: "ERROR: Failed to build gem native extension."。參考這篇的解法:
    sudo aptitude install libmysqlclient15-dev
    sudo gem install mysql
和 Mercurial 整合部份參考官方文件和作法如下:
  1. 在 Redmine 的 Repository 設定裡填入 Mercurial repository 的檔案路徑。
  2. 在執行 mongrel 的使用者的 $HOME/~.hgrc 裡加入信任 Mercurial repository 目錄的擁有者, 比方說我用 fcamel 跑 Redmine, 但 repository 的擁有者是 hg, 就要在 ~fcamel/.hgrc 裡加入:
    [trusted]
    users = hg
    
    不然會跑出 "Not trusting file hgrc from untrusted user" 的錯誤訊息。
我懶得設 apache, 就直接跑 mongrel daemon, 用起來還頗順的:
mongrel_rails start -e production -p 3000 -d

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...