1.在安装nginx和部署rails工程之前,先让rails工程在production下跑起来
我这里说的是sqlite3的数据库,
在Gemfile中添加:
gem 'yaml_db'
接着在工程文件夹下:
bundle install rake db:dump //迁移数据库
在config/database.yml文件添加如下内容:
production: <<: *default database: db/development.sqlite3
加载数据库:
rake db:load RAILS_ENV='production'
看看secrets.yml文件是否有:
production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
没有的话添加,有的话在终端输入(在工程文件夹下):
rake secret
生成一段符号,比如:
f1b5a8a6e8096552451058e222b5d55b95b906d4df983ae052228b6e194e17ae2a04f545d45211f5087be7bd275d829e5e5aa67ab12bb09ae0e953578002dcdf
将生成的符号copy替换secrets.yml中的<%= ENV["SECRET_KEY_BASE"] %>:
production: secret_key_base:f1b5a8a6e8096552451058e222b5d55b95b906d4df983ae052228b6e194e17ae2a04f545d45211f5087be7bd275d829e5e5aa67ab12bb09ae0e953578002dcdf
最后让工程跑起来:
rails s -e production
如果没有样式或一些功能不能使用,可以检查一下/config/enviroment/production.rb,主要是样式文件引用的一些问题,找到文件中这样的一句:
config.serve_static_assets = false
将false改成true再跑一下工程试试。
2.用passenger安装nginx(默认安装目录为/opt/nginx)
首先安装passenger:
sudo gem install passenger
安装nginx:
sudo passenger-install-nginx-module
在安装时会自动检测需要安装其他的插件,可以根据提示进行安装,安装完它提示的需要后,再执行上面的语句一遍就可以安装了,途中会有选择,一般选择1。
编辑nginx的启动脚本:
git clone https://github.com/aiyuelian/railsStartShell.git
将启动脚本拷贝到/etc/init.d下:
sudo cp /railsStartShell/nginx /etc/init.d/
现在可以跑一下看看:
sudo /etc/init.d/nginx start
打开浏览器输入localhost, 如果启动不了,可能你的默认的80端口被占用,可以关掉占用80端口的服务,也可以更改端口号比如8080,然后输入localhost:8080。
接下来关联rails工程:
cd /opt/nginx/conf sudo gedit nginx.conf 打开nginx.conf文件
找到如下代码的地方:
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; }
修改:
server { listen 80; //端口号 server_name localhost; rails_env development; #charset koi8-r; #access_log logs/host.access.log main; location / { root /home/moneyinto/rails_projects/huodongtong/public; //rails工程pubilc的路径 passenger_enabled on; }
再跑一下:
sudo /etc/init.d/nginx restart //重启服务
在浏览器上跑如果有Could not find a JavaScript runtime的错误,在Gemfile中添加:
gem 'therubyracer'
执行bundle install后再跑一下,看看效果。