rails3转载

set :application, "abc"
set :repository,  "git://github.com/gaagaaga/abcde.git"

set :scm, :git

set :user, 'deploy'
set :use_sudo, false
set :deploy_to, "/home/deploy/rapp/abc"
set :deploy_via, :remote_cache

role :web, "aaaa.bbb.com"                          # Your HTTP server, Apache/etc
role :app, "aaaa.bbb.com"                          # This may be the same as your `Web` server
role :db,  "aaaa.bbb.com", :primary => true # This is where Rails migrations will run

after "deploy", "my_tasks:post_deploy"
default_environment["PATH"] = "/opt/ruby/bin:/usr/bin:/bin:/usr/sbin:/sbin"

namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

namespace :my_tasks do
  task :post_deploy do 
    run "ln -sf #{shared_path}/config/database.yml #{release_path}/config/database.yml"
    run "ln -sf #{shared_path}/public/photo_store #{release_path}/public/photo_store"
    # run "ln -sf #{shared_path}/vendor/gems #{release_path}/vendor/gems"

    run "cd #{deploy_to}/current && bundle install vendor/gems"
  end
end

 

 

skip to main | skip to sidebar

大貓共和國

2010年10月18日星期一

Rails 3練習筆記

這幾天有空時,把rails 3的東西練了一下。基本上我是照著xdite的這篇練習中,rails 部份的七個步驟做一遍。雖然xdite在寫這篇時用的應該還是rails 2.x,但要練的概念應該大同小異吧。我手上的參考書是AWDR2(是的,是第二版),和Beginning Rails 3(買來後發覺有點太淺了,但對於與rails脫節太久的我來說,還是不錯的參考書)。如果要玩rails 3的,要查東西似乎還是先查Rails Guide比較快 -- 因為Rails 3太新了,直接Google很常會搜到舊版本的solution。

以下是我印像較深的問題筆記,內容包括把xdite的練習跑一遍,並試著deploy到Heroku和自己的Linux Server上…

安裝ruby + rails development環境…我使用的OS是Ubuntu。一開始沒看到xdite這篇的說明,很白目的用了apt-get install ruby。結果就踩中了ruby 1.9.1 + rails 3.0.0當機的雷(rails 3現在官方只支援ruby 1.8.7及1.9.2)。我想不只是這個原因,用套件的ruby還會有很多相依性的問題吧。最後我因為想同時試rubby 1.9.2和1.8.7,所以選用了rvm,就算沒有要切版本,感覺用rvm管理ruby也滿乾淨的。

gem install rails不知為何速度超慢,而且console完全沒有回應。改用gem i --verbose rails,才能確認真的有在跑,沒有當機。

( 3)論壇的文章要能夠分頁,每一頁 20 筆,每一個論壇要秀出現在論壇裡有多少 post 數量。可用 params 配合 named_scope 在文章列表排序。

一開始我寫好了counter cache,在「看版列表」中成功的使用了counter cache減少select count query。接下來做paginate時,一開始我看別人的範例寫成這樣(省略無關的condition)

Article.paginate :per_page => 20, :page => params[:page]

但在server console中發現還是有select count的query,trace了一下will_paginate源碼,發現雖然will_paginate沒有正確讀到cached count,但可以在paginate時當參數塞進去:

Article.paginate :per_page => 20, :page => params[:page], :total_entries => @forum.articles_count,

當然,最後才發現rdoc根本有寫可以這樣下參數 Orz

( 4)每篇文章可以上傳附件
雖然可以用paperclip plugin,但這功能我選擇試著手刻看看。我在開發過程中有丟上Heroku,然後才想到「啊...Heroku沒辦法寫入靜態檔案,要的話要用S3」。
( 5)Admin 可以刪改所有文章,建立一個後台做這件事。網址是 http://example.org/admin/。只有身分是 admin 的人可以進後台。admin 的判別方是 column 裡加一個 boolean,判斷是否 admin。這個 attribute 必須用 attr_accessible / attr_protected 保護。
Admin namespace我是照 這篇做的,做了看版管理及文章管理。就一般論壇而言,像「看版管理」這種東西,一般人不會有新增、修改、刪除的權限(版主可能有修改),所以scaffold架出來的東西應該的確比較適合移到admin去,而給使用者的邏輯再手動打造。但我的實作有種不夠DRY的感覺,把view和controller的 code複置兩份,感覺不太好。可以想見,其實可以利用繼承、共用函式等方式,將程式碼變的更精簡。這部份有更好的best practice嗎?
( 6)用 Rake 撰寫自動化步驟,生假資料。寫一個 rake 可以達成以下步驟:「砍 db => 建 db => 跑 migration => 生種子資料」,另一個 rake 是生假文章與假論壇。
heroku不給直接跑rake db:drop。也就是說不能heroku rake db:drop,但可以heroku db:reset; heroku rake dev:fake。當然,這應該也可以寫成一個local的task。
( 7)在租來的 VPS 上面建置 Ruby on Rails production 環境,使用 Ruby Enterprise 與 mod_rails。使用 capistrano 佈署 application。
首先,我選用的VPS是 linode。之前因為好奇,租過一個月的linode來玩,所以就選擇了這個較熟析的環境。灌了linode提供的Debian image後,接下來照著xdite建議的 rails-nginx-passenger-ubuntu這篇做。一路上沒碰到什麼問題。

接下來,聞capistrano之名已久,但不知為何這個ruby上最有名的deploy工具,文件似乎有點少。Anyway,看著AWDR2和一些網上的教學,還是可以做的出來。我一開始照著網路上的一些文件,把deploy時的symbolic link功能做好。但bundle gems的問題我一時找不到best practice…看了這個影片,雖然覺得解法好像不夠好,但還是先照著做了。bundle path找不到的問題,除了在run中打absolute path外,也可以在deploy.rb中下

default_environment["PATH"] = "/opt/ruby/bin:/usr/bin:/bin:/usr/sbin:/sbin"

去指定path。

最後我的deploy.rb大概致上如這個gist。但我對capistrano的best practice仍有許多疑問…bundle install要自動化嗎?如果不自動化,在機器很多時要一台一台bundle install?自動化的話,要讓capistrano use_sudo嗎?不sudo的話,gems要裝在vendor/gems嗎?如果這樣做的話,vendor/gems要不要做symbolic link呢?(像我現在每cap deploy一次,就把所有系統沒有的bundle gems裝一次,其實有點慢)。

目前練習到這邊。基本上要跑完這份練習沒有難度,但很多地方會覺得處理的不夠好。Best practice可能需要看書或資料、有人指導、或經驗的累積吧…

張貼者: Mr. BigCat 於 下午11:42

標籤: Rails

0 意見:

張貼意見

此文章的連結

建立連結

較新的文章 較舊的文章 首頁

訂閱: 張貼意見 (Atom)

Links

Recent Comments

標籤

網誌存檔

RSS訂閱

http://liusu.javaeye.com/blog/351795

posted on 2010-12-20 00:35  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2010/12/20/1910945.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值