Skip to content

Instantly share code, notes, and snippets.

@flaneur2020
Created January 13, 2012 12:39
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save flaneur2020/1605918 to your computer and use it in GitHub Desktop.
Save flaneur2020/1605918 to your computer and use it in GitHub Desktop.
notes on setting up the rails stack

rvm

before rvm install 1.9.2, make sure

sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion nodejs

rvm requirements可以列出依赖的软件。

Passenger

passenger-install-apache2-module时出来的提示sudo apt-get install libopenssl-ruby是坑爹的,跟本没有。

解决方法:

rvm remove 1.9.2
rvm pkg install openssl
rvm install 1.9.2 --with-openssl-dir=$HOME/.rvm/usr

bundle

bundle install RAILS_ENV=production是个错误的命令,因为bundle会把后面的都当成安装gem的目标路径。它会产生一个名为./RAILS_ENV的文件夹,并拿它作为以后不bundle安装的默认路径。

如果不慎打错了,解决方法: rm .bundle -rf

cd `bundle show rails` 可以cd到某gem所在的目录。

RAILS_ENV

  • rails s -e production;
  • rails c production;
  • rake xxx:run RAILS_ENV=production;

capistrano

对于那种『有可能错误但错了也不碍事』的命令,可以在后面加一个; true,比如

run "kill -QUIT `cat #{deploy_to}/shared/pids/unicorn.pid`; true" 

APP_CONFIG

有时在application.rb下加上这一行:

APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")

在production模式下是有坑的。YAML.load_file的结果是一个字符串为key的哈希,如果用symbol取东西就会出错(但在development模式下一切正常)。解决方法是换成ActiveSupport中的HashWithIndifferentAccess

APP_CONFIG = HashWithIndifferentAccess.new YAML.load_file("#{Rails.root}/config/app_config.yml")

Migration

add_column时如果不小心把boolean敲成bool,会把sqlite的的db:schema:dump搞坏掉,而sqlite并不允许更改column的名字。只能用一种蛋疼的work around

Encoding

database.yml中没有设置collation: utf8_general_ci的话跑出来的schema似乎会选用数据库的默认collate? 如下脚本可以更改数据库中所有表的collation为utf8_general_ci:

mysql --database=dbname -B -N -e "SHOW TABLES" \
| awk '{print "ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"}' \
| mysql --database=dbname &

Mongodb

ubuntu源里的mongodb-server是坑爹的,版本太低,正确的是mongodb-10gen,需要加个

Misc

一段小脚本,无关rails,但可以提升跑rake task时的来福值。

@tbocs
Copy link

tbocs commented Jan 22, 2012

迥,www.railstutorial.org 这本书写的巨好,按照书中所介绍的安装步骤,完全顺利地安装~

@flaneur2020
Copy link
Author

总有些意料外的问题会遇到的

@lenage
Copy link

lenage commented Mar 7, 2012

+1,原来还可以这样
run "kill -QUITcat #{deploy_to}/shared/pids/unicorn.pid; true"

@flaneur2020
Copy link
Author

@lenage :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment