rails3转载
set :application, "abc"
set :repository, "git://github测试数据/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测试数据" # Your HTTP server, Apache/etc
role :app, "aaaa.bbb测试数据" # This may be the same as your `Web` server
role :db, "aaaa.bbb测试数据", :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 Blogtrans首頁 舊網誌封存 About ContactRecent Comments
標籤 Blogtrans (11) Chrome (3) Rails (3) Blogger (2) Haskell (2) MongoDB (2) AlgoCat (1) Apache (1) Brainfuck (1) Devise (1) Erlang (1) FLOLAC (1) Functional Programming (1) Heroku (1) Linux (1) Mongoid (1) Murmuring (1) Python (1) Ruby (1) flot (1) git (1)
網誌存檔 ▼ 2010 (8) ▼ 十月 (4) AlgoCat 開發筆記 (Rails3+MongoDB) Rails3, Mongoid, Devise, Heroku, MongoHQ筆記 Rails 3練習筆記 再度考慮搬家 ? 九月 (1) OpenFoundry疑似烏龍事件? ? 八月 (1) Blogtrans更新 ? 七月 (1) [FLOLAC]心中有Monad,萬物皆Monad ? 六月 (1) 2010-06 久違的Blog更新 ? 2009 (14) ? 八月 (1) 用git管理具有external的svn repository ? 七月 (4) 無名備份檔問題 Murmuring.... Haskell Monad : 以Brainfuck Interpreter為例 (下) Haskell Monad : 以Brainfuck Interpreter為例 (上) ? 六月 (1) Apache下以不同uid及pid執行不同VirtualHost ? 五月 (5) 在Linux/Mac作業系統上運行Blogtrans Blogtrans 更新 090522 Blogtrans雜記 無名小站備份檔問題 Blogtrans版本更新:090503 ? 四月 (3) Blogtrans已知問題 Ruby V.S. Python: Operator += JustFuck, A x86 Just-In-Time Compiler for Brainfuc... ? 2008 (7) ? 十月 (1) Google Chrome在EeePC上的效能調校 (適用於其他SSD硬碟的電腦) ? 九月 (6) Google Chrome瘋狂讀寫硬碟的問題 Google Chrome 無痕模式實戰心得 Blogtrans版本更新 (Rev15) Pixnet搬家到Blogger也可以囉 最方便的無名搬家到Blogger方式 (可搬留言,無一天五十篇限制) Erlang入門心得、學習資源推薦
RSS訂閱
http://liusu.javaeye测试数据/blog/351795
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did43462