意料不到的问题总会遇到,记一下的话再掉进同一个坑里就不那么容易了 :D
先抛个砖,都是来自平时记录的一个gist
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
跑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 install RAILS_ENV=production
是个错误的命令,因为 bundle 会把后面的都当成安装 gem 的目标路径,而 bundle 本身并不存在 RAILS_ENV 这回事。它会产生一个名为./RAILS_ENV 的文件夹,并拿它作为以后不 bundle 安装的默认路径。
如果不慎打错了,解决方法:rm .bundle -rf
cd `bundle show rails`
可以 cd 到某 gem 所在的目录。
rails s -e production;
rails c production;
rake xxx:run RAILS_ENV=production;
对于那种『有可能错误但错了也不碍事』的命令,可以在后面加一个; true
,比如
run "kill -QUIT cat #{deploy_to}/shared/pids/unicorn.pid
; true"
有时在 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")
add_column
时如果不小心把boolean
敲成bool
,会把 sqlite 的的db:schema:dump
搞坏掉,而 sqlite 并不允许更改 column 的名字。只能用一种蛋疼的work around。
ubuntu 源里的mongodb-server
是坑爹的,版本太低,正确的是mongodb-10gen
,需要加个源。
一段小脚本,无关 rails,但可以提升跑 rake task 时的来福值。