rails 常見報錯

http://railser.cn/


最近的一個網站單子裏,需要給客戶用discuz7.2實現一個會員功能,dz是大品牌,何況康盛又被騰訊收購,質量應該可靠。所以反覆衡量,dz成爲首選了。(跟DZ和康盛的系列產品源淵太多了。)

客戶提出的問題還算順利的一一解決,客戶最後提出一個要求,要對最新的消息有一個提示。這個實現很簡單,給客戶講解了如何設定聲音,可是問題來了,我這裏怎麼都聽不到聲音,客戶那裏也是如此。

怎麼會這樣,開始我以爲是我瀏覽器的問題,但是幾個瀏覽器測試都無聲,這個是絕對不應該的。代碼是官網下載的discuz7.2 utf8。什麼情況?怎麼辦?

網上查了一下竟然很多人反饋了這個問題,可是沒有幾個提出解決辦法的,有兩篇的解決辦法嘗試了一下,沒有解決問題。難道是我的特例??

外包方式開發最可怕的是耽誤進度和過多的向客戶解釋,爲客戶選擇的產品,如果質量不過關,影響的絕對就是製作方的信譽。

現在問題來了,如何解決。

解決辦法:

1、先參考官方提供的一個解決辦法,僅做參考,因爲它也沒解決問題。所以我真不知道官方的維護是幹什麼吃的。

http://www.discuz.net/forum.php?mod=viewthread&tid=1523437&page=7#pid12811924

2、因爲mp3,wav等格式均無效,我讓合作的美工把聲音文件轉成了swf,可以在這裏下載。

下載論壇提示音swf格式

3、按照上面那篇提示文章,修改一下對應的文件,引用改成swf,並且簡化swf的文件引用,因爲那個player已經無用了,直接引用swf聲音即可。下面是代碼,希望能幫助一些朋友。

templates/default/memcp_profile.htm 499行

$('soundplayerlayer').innerHTML = AC_FL_RunContent('id', 'pmsoundplayer', 'name', 'pmsoundplayer', 'width', '0', 'height', '0', 'src', '{$boardurl}images/sound/pm_'+file+'.swf', 'menu', 'false',  'allowScriptAccess', 'sameDomain', 'swLiveConnect', 'true'); }

templates/default/pm_checknew.htm 可以不改動,因爲在我的方案裏它已經沒用了,如果有嘗試的朋友,可以對應替換這段代碼

<script type="text/javascript" reload="1">$('pmsound').innerHTML = AC_FL_RunContent('id', 'pmsoundplayer', 'name', 'pmsoundplayer', 'width', '0', 'height', '0', 'src', '{$boardurl}images/sound/pm_$pmsound.swf',  'menu', 'false',  'allowScriptAccess', 'sameDomain', 'swLiveConnect', 'true');</script>

兩段代碼的含義是一樣的,都是直接引用swf聲音文件。

templates/default/header.htm 在40行位置,增加

<span id="pmsound"></span> <!--{if $prompt}--><script type="text/javascript" reload="1">$('pmsound').innerHTML = AC_FL_RunContent('id', 'pmsoundplayer', 'name', 'pmsoundplayer', 'width', '0', 'height', '0', 'src', '{$boardurl}images/sound/pm_$pmsound.swf',  'menu', 'false',  'allowScriptAccess', 'sameDomain', 'swLiveConnect', 'true');</script><!--{/if}-->

此段是解決問題的關鍵,注意藍色的部分,論壇代碼裏是缺失這個的,經檢查,pm_checknew裏的執行結果被插入到id="append_parent"的一個 div中,而且,裏面的<!--{if $s}-->是無效的

4、到後臺更新緩存,重新測試,聲音提示成功。

從發現問題到解決問題經歷了幾天的時間,這裏問題解決不了,終究不能卡住不前的。所以選擇好的產品,使用正確的方法,實在太關鍵。康盛將太多的心思用到了一些花哨的功能上,代碼質量一直未見提高,產品硬傷內傷依舊,一個畫皮一樣的產品,只能靠忽悠來支撐了。

 

 

 

 

 

 

 

 

 

 

26

rails new 特定版本

rails _3.0.7_ new railstest

說明:安裝多個版本,尤其安裝了3.1.0 pre 後,使用Rails 3.0.7這個最新穩定版開發項目。

20

crontab的寫法誤解

分類:RailsNote | 給我留言 |

crontab的標準寫法參照這裏,http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-autotasks.html

那麼,每閣特定小時運行命令如何寫呢?

每隔30分鐘,運行一次命令,可以寫

*/30 * * * * /sbin/do_something

每隔4小時,可以寫成

* */4 * * * /sbin/do

嗎?不可以,這樣會產生很嚴重的錯誤,導致我每分鐘運行一次命令,直到某種情況下被中止。想到這我真心疼我的mysql和cpu。

這裏正確的寫法應該是

0 0,4,8,12,16,20 * * * /sbin/do (whenever 給出的寫法)

或者

0 */4 * * * /sbin/do (我認爲可行的寫法,不過至今未確認,這個寫法可以從保存時開始,每隔4小時執行一次)

兩個寫法,都要在第一個位置,指定執行開始的分鐘數。

請各位指正,我也繼續驗證一下我的寫法。

 

20

readline load error的解決辦法

服務器總算都調試完了,今天打算看一下一個app的具體信息,發現 rails c提示錯誤。

這是個常見的錯誤:`require': no such file to load -- readline (LoadError)

原因:缺少readline

解決辦法:進入rvm ruby1.9.7的src,安裝readline

具體:

>> which ruby

/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby

>> cd /usr/local/rvm/src/ruby-1.9.2-p180/ext/readline

>> ruby extconf.rb

>> make

>> make install

再次rails c,解決問題了。

筆記太有用了,都省去了回憶的時間。

07

在CentOS5上部署Rails3應用

1、安裝rvm

安裝rvm前,要先安裝git。因爲rvm的安裝教程就是一個git的小腳本。

>>wget http://kernel.org/pub/software/scm/git/git-1.7.5.3.tar.bz2

Oop!這裏有個問題,我tar不常用,這裏tar xvfz git-... 是會提出格式錯誤的,查了一下需要換一個命令:tar -xvjpf git-...

之後,

make prefix=/usr/local all

make prefix=/usr/local install

看到git 版本後,安裝rvm

git --version

剩下的,就是按照 https://rvm.beginrescueend.com/rvm/install/ 的講解一步步安裝吧,最後,阿?爲什麼

type rvm | head -1

會提示錯誤呢?我也被搞糊塗了,按照提示,我重新打開一個終端窗口,這下正常了。所以再看看文檔吧。

接着,安裝1.8.7

2、安裝ruby 1.8.7和gem

rvm install 1.8.7

注:我又將用戶切換回了root,而在進行到Load RVM into your shell sessions as a function的時候,我不得不切換回user。

rvm use 1.8.7

顯示正常了。

安裝gems

http://rubygems.org/pages/download

3、安裝rails

gem install rails -v 3.0.7 --no-rdoc --no-ri

如果安裝rdoc和ri,我出現了問題,具體的情況未明。

問題又來了,>> rails -v 找不到命令

翻看文章的過程中,有一句話很重要,“gem install rails # 注意不要加sudo,否則會安到系統的ruby下,而不是rvm的ruby下”

這是在百度裏查到的,可是不用root,rvm也沒安裝成功,還是我最開始忘記使用user,而在安裝完rvm後,ruby也用了root權限安裝。不知道這裏的影響會有什麼,總之,我犯了一個錯誤,版本搭配錯誤。

應該是 ruby1.9.2搭配rails3.0.7。

好吧,還好有rvm,安裝ruby1.9.2,再 gem install rails,竟然沒有出現第一次時候的 ri 錯誤。欣慰吧。

這裏還有一些細節,不影響整體即可,現在 rails new testrails 成功創建了一個應用。

4、安裝svn

曾經熟悉的svn頁面,已經轉移到 apache 下,地址在這,http://subversion.apache.org/ ,用戶手冊在 http://svnbook.red-bean.com/ 。

按照一些文章介紹,安裝svn實在太複雜了,突然我想起來yum和apt-get。來試一下。

yum install subversion

成功了。

按照這個文檔,我配置過兩次,這裏不再詳述了,又需要的朋友看一下。

我每次都會參照它ignore的操作。

5、ssh配置

在我本地重新生成一個key,其實沒必要的,我只是出於練習的目的。

>> ssh-keygen -t rsa

在服務器上

>> mkdir .ssh (其實沒太大必要了,因爲我的key不打算放到這裏了)

然後傳輸這個key上去

>> scp ~/.ssh/id_rsa.pub loginname@hostdomain:.ssh/authorized_keys

這裏把key命名爲authorized_keys。按照一些教程的說明,綜合起來簡單筆記一下。

在/etc/ssh/<username>建立文件夾,將authorized_keys mv進來,並給予權限

>> chmod 755 <username>

>> chmod 644 <username>/authorized_keys

編輯/etc/ssh/sshd_config,改寫這一行

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

並取消註釋這兩行

RSAAuthentication yes

PubkeyAuthentication yes

保存後,

>> /etc/init.d/sshd restart

啓動另一個終端,登錄時彈出一個窗口提示輸入密碼,其實就是剛纔生成key時候的passphrase。確認後,就不用輸入密碼直接登錄了。

這裏有一個調試經驗。

>> ssh -v name@domain

會輸出交互信息,這裏我發現它先校驗key,如果不通過,就校驗登錄密碼了。所以,如果上面的任何一個步驟有問題,比如權限不對或者寫錯字母,這裏就會繼續提示需要密碼。

如果上面的都正確了,這時就不用再次輸入密碼直接登錄了。

感謝這篇文章,讓我節省了如此多的時間。感謝分享的精神。

接着需要提高一些安全性了,常見的有

PermitRootLogin no (禁止用root登錄,這是默認的,當然有些時候會被其他的開發人員打開,檢查一下是必要的)

StrictModes yes (也是默認的)

PasswordAuthentication no (禁用密碼登錄,加上這個安全性就足夠了,當然還有其他,歡迎各位指點。)

 

時間過去了一個星期,這期間我在調試一個Rails程序,打算下面部署到服務器上,而不是隨便用個railstest應付了事。這裏又溫習了很多rails得技巧,不過時間好快,一下子就是8天的時間。

好了,我的Rails程序已經基本完成小樣了,開始用capistrano設置。

6、Capistrano

這裏稍微特殊一些的地方,是我用的svn+ssh(注意順序,寫反了不行)鏈接服務器並cap命令。這裏沒有辦法證明一件事情,寫出來供大家參考,就是私鑰設置完,在服務器上也測試一下,比如

svn checkout -q  -r5 svn+ssh://domain.com/test/trunk tmp

這裏會要求輸入passphrase,或者添加host到know_host,都可能潛在的影響第一次cap的成功。當然,第一次cap失敗可能是必然的,關鍵是下面分享一下我的deploy.rb給大家參考,減少一些查詢的時間,當然很多東西還得看過說明才瞭解,建議看這篇文章,很有幫助。

下面是我的代碼

(略過)

在配置svn的時候,會有不同的權限設置,比如網站目錄會放到/var/www/中,我覺得這是安全性的問題,超過這個筆記的範圍,就不記述了。不過這其間還是看了一些文章,後面做安全調整的時候會用上的。

補充幾個命令

cap -H 查看幫助

cap -T 查看任務,-vT查看更多任務

cap -e deploy:cold 查看deploy:cold 的說明

7、apapche,nginx和passenger

因爲CentOS上的apache已經安裝好了,所以這裏只要安裝一下passenger就可以了,安裝起來竟然無比簡單,缺少的lib按照提示yum一下就可以了。

 

8、安裝sqlite3-ruby的問題

google了一下發現很多人安裝這個出現問題,yum install sqlite3-ruby 也不可以,這裏很奇怪,yum竟然找不到這個包。

省去一些步驟,直接 yum search sqlite, 發現給出的包有:

mono-data-sqlite.i386 : sqlite database connectivity for Mono
pdns-backend-sqlite.i386 : SQLite backend for pdns
php-pear-Log.noarch : Abstracted logging facility for PHP
python-sqlite.i386 : Python bindings for sqlite.
qt4-sqlite.i386 : SQLite drivers for Qt's SQL classes
sqlite.i386 : Library that implements an embeddable SQL database engine
sqlite-devel.i386 : Development tools for the sqlite3 embeddable SQL database engine.

原來是包的名稱不對,所以

yum install sqlite.i386

提示已經安裝

yum install sqlite-devel.i386

安裝成功,再次 gem install sqlite3,提示

sqlite3-ruby only supports sqlite3 versions 3.6.16+, please upgrade!

好,可算有了進展。下載 http://www.sqlite.org/download.html 最新版本的sqlite,安裝後,再次 gem install sqlite3,成功了!!

回到rails目錄,再次 bundle install。勝利完成。

9、rake任務出錯,/lib/rake.rb:32: warning: already initialized constant RAKEVERSION

臨時的解決辦法,bundle exec rake RAILS_ENV=production  db:migrate

這不是最終解決辦法,還在找,剛纔心急一下給發佈了,其實還沒寫完呢。。

問題發現了,是rake的問題,卸載之後重新安裝rake 0.8.7,問題暫時解決。

10、No such file or directory - /tmp/mysql.sock

CentOS的位置和方法,在此備註,ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

11、invalid packet: sequence number mismatch(3 != 1(expected))

說是ruby-mysql2.9.4的問題,暫時使用2.9.3。但是問題依舊。

gem 'mysql2', '0.2.7' 和gem 'mysql'的區別

最新版本的mysql2,是0.3.2,這是集成進rails3.1的,不適用於rails3.0.7,所以需要指定版本爲0.2.7,環境可以爲Raisl 3.0.x和mysql 5.x

gem 'ruby-mysql'和gem 'mysql-ruby'的區別:都不用了,直接用 gem 'mysql'

“invalid packet: sequence number mismatch”的問題已經解決,去掉ruby-mysql的gem,直接使用 gem 'mysql'

在我的版本環境裏,gem 'mysql2'也不行,我的環境,rvm, ruby1.9.2p180, rails 3.0.7

12、rake 0.9.2和0.8.7,會被同時安裝,也會因爲0.9.2產生問題,建議刪除0.9.2

 

13、自動執行rake任務

看了一些介紹,其實總結起來是三個事情

(1)參照系統默認的crontab任務,這方面資料很多

(2)rails的好處是gem和實現方案很多,建議使用 whenever 來實現,它會直接提示代碼如何寫,粘貼到當前用戶的crontab裏就可以

(3)具體做法,

>> crontab -e   編輯當前用戶的cron任務

>>  */30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com && RAILS_ENV=production rake autorss:work --silent'

其實這個文件就這一行就可以,我完整的代碼是

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/gems/ruby-1.9.2-p180@global/bin

MAILTO=root

HOME=/home/liwei
*/30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com && RAILS_ENV=production rake autorss:work --silent'

 

寫在最後:算是大功告成??其實我沒感覺,但是總算把我想寫的內容寫完了。後面還會有一些筆記。這個筆記到此用了2周時間,留念。

22

hello, rails3.1 pre 第二部分

接着上一篇,問題繼續。

rake db:migrate

>> rake aborted!

>> undefined method `task' for #<Rails31test::Application:0x00000100de6a60>

好吧,繼續找答案,此處還是省略一些細節,直接看這裏吧。

>> bundle exec rake db:migrate

問題暫時解決。

至此,projects已經可以看到了,剩下的還在琢磨。

補充一些鏈接:

CoffeeScript  http://jashkenas.github.com/coffee-script/

RVM(Ruby Version Manager)  https://rvm.beginrescueend.com/

SASS/SCSS  http://sass-lang.com/

Sprockets  http://getsprockets.org/

 

 

 

21

Hello, Rails3.1 pre

Rails3.1面世了,趕緊嚐鮮吧。可是,第一個問題就出現了,更新失敗。此處略過一堆字,直接筆記:安裝rvm吧。

https://rvm.beginrescueend.com/rvm/install/

rvm簡直是多版本ruby開發環境下的救世主。補充一下筆記:

在安裝完rvm後,rails new rails31test 新建了一個測試項目,一切正常,可是bundle的時候出錯,就連 gem list都出錯。查了一下,原來我們要重新安裝gem,也要重新裝rails。

ps:各位是不是會覺得,我剛纔安裝了阿,爲什麼又要裝一次?你是不是也看這個視頻了?http://railscasts.com/episodes/265-rails-3-1-overview

一切都沒錯,只是rvm 1.9.2@railspre --create 是新建了一個gemsets,(此語法爲簡寫)。這樣我們還得安裝一下bundler

rails31test liwei$ gem install bundler

rails31test liwei$ bundle

rails31test liwei$ rails g scaffold project name:string

... ...

/Users/apple/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.1.0.beta1/lib/sprockets/railtie.rb:37:in `block (2 levels) in <class:Railtie>': undefined method `context' for #<Sprockets::Environment:0x0000010312c420> (NoMethodError)

查到這個問題的解決辦法:https://github.com/rails/rails/issues/453

在Gemfile裏寫:

gem 'sprockets', '2.0.0.beta.2'

原因:beta.2 is required by rails 3.1.0beta1

注意:安裝的時候,使用的是 gem 'sprockets', '2.0.0.beta.5',所以還要 bundle update sprockets 降回到beta.2

再次

rails31test liwei$ rails g scaffold project name:string

成功

未完待續吧... ...

29

redmine插件開發心得

上上週經Q友介紹,接了一個redmine插件開發的小項目。我很感興趣的是可以藉此機會把redmine熟悉一下,所以沒太考慮價錢就答應了下來。現在想想,這次開發學到的東西很多,也認識了專業的開發團隊,很值得。下面把redmine插件開發的經驗筆記一下。

先來截圖:

地址:http://www.cocos2d-x.org/projects/cocos2d-x/apps

簡單介紹下

cocos2d-x is a multi-platform, light weight & developer-friendly C++ 2D mobile game engine, open source and released under MIT License. It is a child branch of the famous "cocos2d-iphone" project, and will keep the primary features sync with it.

更多細節請訪問 http://www.cocos2d-x.org/projects/cocos2d-x/wiki

好了,說下這個插件實現的功能。

一是管理髮布平臺,比如iOS,Android,WoPhone,Windows,Other,未來它還會有其他的平臺。

二是在這些平臺分類裏,上傳app,比如時下最火的iOS app,android app等。當上傳iOS app時,可自動採集該信息。

一、讓我們開始

插件如何開發呢?下載其他插件的代碼來研究是關鍵的第一步。因爲之前對redmine插件開發一無所知,所以下面的筆記有點囉唆。

先看一下官方發佈的插件開發文檔,http://www.redmine.org/projects/redmine/wiki/Plugin_Tutorial,請大概的瞭解一下。然後,我們去redmine插件列表,下載兩個很有代表性的插件,redmine_polls和redmine_bookmarks,把它們放到 vendor/plugins 裏。選擇這兩個插件的原因是它們都是自主上傳,填寫內容的。

注意:在最新版本的redmine1.1中,polls會引起個異常。

二、如何管理插件

這是插件管理界面,如果你按照上面插件教程開發的話,你會發現缺少了Configure功能。如何加入這個功能,並且它可以做什麼?可以完全的參考上面兩個插件中的init.rb 和games插件裏的寫法。

 

settings :default =&gt; {},
           :partial =&gt; 'platforms/manage'

 

 

這兩行代碼的作用,使得我們可以編輯一個頁面,這個頁面裏,實現了games的platform管理。當然,你也可以在configure裏增加apps的管理,豐富管理員功能。

這裏要注意的是,權限如何分配了。

三、如何分配權限

按照文檔的描述,我們可以很妥善的分配各個角色的權限。public => true,即可將所指定的action開放給所有人,如果想屏蔽掉未登錄的賬號訪問,:require => :loggedin 即可。如果想對登錄賬號做區別,就需要針對每個action做以分別了。

權限設置的文檔不夠全,建議大家多參考別人的代碼,和看源代碼分析一些用法。

四、設置導航菜單

在插件的init.rb文件裏,需要單獨寫一遍插件所使用的路由規則,爲了是插件地址更沒關,我們的做一些代碼上的犧牲。

 

ActionController::Routing::Routes.draw do |map|
  map.connect 'projects/:project_id/apps', :controller =&gt; "apps", :action =&gt; "index"
  map.connect 'projects/:project_id/apps/all', :controller =&gt; "apps", :action =&gt; "all"
  map.connect 'projects/:project_id/apps/:id', :controller =&gt; "apps", :action =&gt; "show"
  map.resources :apps,
    :member =&gt; {:recommend =&gt; :post, :delete_pic =&gt; :post, :snatching =&gt; :get, :doing =&gt; :post},
    :collection =&gt; {:all =&gt; :get}
end

 

 

 

這是games裏的設置,只是將三個方法做了前綴處理,這樣可以和其他導航鏈接類似,都是 /projects/text_proj/apps/9 的形式。否則,按照resource的形式,將會是很難看(客戶也不會接受的)/apps/9?project_id=text_proj

五、開發插件代碼

這是我們最熟悉的部分了,此處省略一萬字節。

六、使用js和css

這個地方有點麻煩,每次改動都得重啓一下服務,因爲每次重啓纔會將js代碼和css文件同步到public下,當然我們可以在public下去寫,收工前拿回到插件目錄下,可是插件用的文件都不大,何況我都是production下開發,改哪個代碼都得重啓。(development下的執行速度你們是知道的)。

七、抓取app store

games插件有一個很重要的功能,就是到app store頁面去採集app信息。代碼在lib下的app_snatcher.rb,功能比較簡單,僅做參考吧。

八、其他插件和gem

出於嘗試的目的,我使用了will_paginate插件來實現分頁,paperclip來保存app採集時候的icon和screenshot,在採集時使用了兩個gem,請編輯你的environment.rb,增加

config.gem 'hpricot'
config.gem 'mechanize'

 

九、總結

如果你覺得這個代碼對你開發redmine插件又幫助,可以在這裏下載它:https://github.com/liwei78/redmine-games 。

歡迎和各位交個朋友,我個人的博客:http://liwei.me,目前正在設計新的界面,會把我的介紹,包括工作內容,都整理髮布到上面。

十:廣告一下

目前我還運營這另外兩個博客,電子長春 京東購物導航

前者關注電子商務動態和IT業內新聞,後者爲京東商城點評,購物推介點評。

 

Update at 2011-6-15

升級了一下,0.0.1到0.0.2,增加了lightbox顯示screenshots

20

errors.add_to_base和errors.add

我們在頁面上進行ajax校驗屬性的時候,有兩種情況會碰到。

一種是,只要出錯,就給一個提示。這個比較常見的就是“您填寫的用戶名或密碼不正確”。因爲這裏可能做了三組判斷,先判斷用戶名是否存在,然後是密碼是否爲空,三是兩者能否檢索出一條紀錄。如果那個出現爲空,就直接返回false,controller也就直接宣佈了上面那句話。

第二種比較複雜,就是每個屬性都會給一個詳細的解釋,甚至多個解釋,比如郵件格式不正確,郵件不能爲空,郵件應該以字母開頭等等。因爲ajax判斷有時候不一定會把model實例傳回來,而可能只給一個message,讓view去針對該輸入進行提示,比如那個經典的輸入礦失去焦點時校驗。

針對上面兩種方法,我經常用到的就是 errors.add_to_base 和 errors.add 方法。這裏做以筆記。內容來自rdoc

 
def validate!
    errors.add(:name, "can not be nil") if name == nil
end
 
 
def validate!
    errors.add_to_base("can not be nil") if name == nil
end
 

其實,它們是一樣的

 
def add_to_base(msg)
    add(:base, msg)
end
 

做以筆記,因爲有時候真的會忘記這些小代碼。

補充幾個方法:

 
def Person.human_attribute_name(attr, options = {})
    attr
end
 

它可以把名稱更人性化的輸出,比如“first_name” 輸出爲 "First name"。但是它是一個過時的方法,我們會得到一個提示:"ActiveRecord::Errors#generate_message has been deprecated. Please use ActiveRecord::Error.new().to_s."

 
    company = Company.create(:address => '123 First St.')
    company.errors.on(:name)      # => ["is too short (minimum is 5 characters)", "can't be blank"]
    company.errors.on(:email)     # => "can't be blank"
    company.errors.on(:address)   # => nil
 

顯而易見

 
def on_base
    on(:base)
end
 

對上面方法的一個補充。

我喜歡netbeans的一個很重要原因就是查看這些代碼的doc很方便,有時候一個簡單的方法附近的doc就能讀上和體會一陣子。呵呵。

其他實用的方法歡迎各位補充。

25

2011,讓APP飛一會吧

分類:default | 給我留言 |

2011,我有個驚奇的開始,我的iTouch有一天突然可以上網了,原因不明。緊接着幾天,接觸了一個開發項目,是做一個APP介紹的網站。可以用Rails。這一點實在讓我暗地裏歡喜:可算有得發揮了。接着,《讓子彈飛》上映,那就讓APP也跟着飛一會吧。

經過一個多月的敲敲打打,www.myappblog.net 正式上線了,這裏把以往Rails2.x用過的技術,在Rails3.0平臺上又加強了一遍,認真體會了一下Rails 3帶來的變革。

MyAPPBlog網站是一個iPhone,iPad應用推薦,點評的網站,上面還增加了很多視頻,講解遊戲的玩法,看得我實在興奮阿。對於不經常逛app store的我來說,沒事看看MyAppBlog的資訊,能發現太多不知道的事情。MyAPPBlog就像一本App雜誌,很方便,而且,它是我的又一個五星級的程序作品。(哈哈)

從MyAPPBlog的網站定位上,可以看到它的特點:一是信息分享,比如最新的資訊,免費的app,二是APP操作視頻,強烈建議把怒鳥的攻略發佈一下,因爲某人。。。。

說說程序,MyAPPBlog用了haml和sass,這極大的提高了頁面的可維護性。這不是一點點的改變,而是把頁面結構,設定的更加規範,比如div class的設計

.title

= @app.title

這樣就實現了一個div層的結構。sass我目前用到它三個特性,變量,命名空間和繼承。

Rails3讓MyAPPBlog的維護更加方便,尤其是之前很難受的fckeditor的附件處理,Rails3上可用的ckeditor gem,直接用了paperclip,圖片文件上傳省了很多代碼。

後面的工作集中在app store的數據分析上,任務挑戰很大,但應用前景非常看好。

這裏稍微提一下,個人對工作的定義也有了一些改進,目前的工作應該叫技術支持。

大多數人理解的外包是拿錢走人的形式,所以,技術支持,就是一個長期的服務狀態,在Rails的領域裏進行不斷的積累,將自身的成果分享給每一個客戶。

寫在最後:

夜深人靜,32歲的人,已經沒有了當年創業時候的衝動,也沒有開發搜索引擎時候的韌勁。事情按部就班的繼續,看着一羣比自己小10歲的年輕人,他們是不是也在經歷我過去10年所做過的事情呢?我現在做的,未來做的,是不是他們10年後也要來做的呢?



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章