搜索
首页后端开发php教程nginx+unicorn部署ruby web环境


    最近接手了一个ruby的web项目,由于之前没有接触过ruby以及相关的web开发,而且项目当中文档缺失,所以在部署该项目的时候很是走了一些弯路最后参照多篇ruby on rails的开发环境部署,以及学习了下ruby当中的gem/bundler等的关系,成功部署项目。在这儿记一下,算是一个小的总结,也可以对ruby web开发刚入门部署环境时提供一个参照。
    我们的项目是基于padrino,如果是基于rails的项目,部署应该也是差不多的。

    1.安装ruby

    由于系统中可能有多个ruby相关的项目,而不同的项目可能需要针对不同的ruby版本进行开发或者测试,所以系统当中可能需要安装多个ruby的版本。而这就需要相应的工具来管理已有版本和安装新版本。我这儿选用的是rbenv,也可以使用老牌的rvm。
     安装rbenv
git clone git://github.com/sstephenson/rbenv.git  ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
添加ruby-build组件
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
添加gem-rehash组件
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
安装ruby(以ruby2.1.5为例)
由于默认安装ruby会比较慢,所以此处先从ruby.taobao.org下载相应的文件,然后使用本地安装的方式来安装
wget -O ~/.rbenv/versions/ruby-2.1.5.tar.gz http://ruby.taobao.org/mirrors/ruby/2.1/ruby-2.1.5.tar.gz
env RUBY_BUILD_MIRROR_URL=file:///home/ziven/.rbenv/versions/ruby-2.1.5.tar.gz# ~/.rbenv/bin/rbenv install 2.1.5
其中wget是下载相应的ruby文件,这里是ruby-2.1.5.tar.gz
RUBY_BUILD_MIRROR_URL
用来指定安装的ruby镜像路径,这里直接使用本地路径。注意本地路径后面应该加上#来结尾
rbenv install命令后面的版本应该跟要安装的ruby版本对应,例如可能安装的版本是带有相应的补丁编号的(例如: 1.9.3-p223),此处也应该写上。

2. 安装必要组件

    因为我们一般采用bundler来管理项目需要的gems,所以此处是需要安装bundler的。
    考虑到国内连接ruby镜像的速度,我们更换gem源为taobao源。
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
之后执行gem sources -l应该只有https://ruby.taobao.org/这一个源
    安装bundler
   
gem install bundler

3.应用部署

    a. clone web源码到合适位置

     这里假设clone之后的源码放置到/opt/projectA

    b.安装依赖的gems

    在项目的根目录执行:
bundle install
    此处需要注意,根据不同的情况执行的命令可能略有差异。例如在生产环境部署时,可能需要执行
bundle install --deployment --without development test
这样部署时,相关的依赖gems被安装到 projectA/vendor/bundle下面。尤其适合不同的项目依赖同一个gem的不同版本的时候使用。

    c.数据库相关迁移

    由于本项目是基于padrino所以需要执行:
padrino rake --envir db:migrate
需要注意的是,此处视情况可能需要使用bundle来执行该命令:
bundle exec padrino rake --envir db:migrate
    数据库迁移成功后,需要创建amdin账户。padrino默认在db/seeds.rb当中完成admin账户的创建。所以此处执行:
bundle exec padrino rake --envir seed
执行过程当中会提示输入admin账户的邮箱跟密码

    d.unicorn部署

     此处可能需要相应的unicorn启动脚本,可以参照ruby-china的unicorn.rb来写。此处从略。
启动unicorn server:
bundle exec unicorn -E production -c unicorn.rb -D
这样padrino server就已经正常启动了。如果unicorn.rb当中监听的是tcp端口,那么此时访问相应的url应该可以打开了。如果是采用的监听unix socket的方式,那么还应该使用nginx(或者apache)来做反向代理。

4. nginx的安装配置

    a. nginx的安装

    nginx就是可以安装linux一般软件的安装方式来安装。推荐使用源码安装方式。此处简略起见,暂以包管理器的安装方式进行安装:
sudo apt-get install nginx-full

    b. nginx的配置

	upstream myserver {
	  server unix:/tmp/projectA.sock fail_timeout=0;
	}
	
	server {
	    listen       7788;
	    server_name  localhost;
	
	    client_max_body_size 10M;
	
	    error_page   500 502 503 504  /50x.html;
	    location = /50x.html {
	        root   /usr/share/nginx/html;
	    }
	
	    root /opt/projectA/web/public;
	
	    try_files $uri $uri.html @app;
	
	    location @app {
	        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header Host $http_host;
	        proxy_redirect off;
	        proxy_pass http://myserver;
	    }
	}

此处将7788端口的请求转发到
unix:/tmp/projectA.sock
进行处理。也即转发到刚刚我们的web服务器处理。
至此,server已经可以正常运行。其他的一些辅助功能可以根据需要进行添加。例如nginx可能需要ssl证书来认证。
ruby on rails项目的部署大同小异,其部署过程当中可能在执行相应的命令时需要根据情况做相应的调整。不过只要熟悉了ruby web的部署方式,其他的可以参照相关框架的文档还是比较容易部署的。

以上就介绍了nginx+unicorn部署ruby web环境,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
简单地说明PHP会话的概念。简单地说明PHP会话的概念。Apr 26, 2025 am 12:09 AM

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInacookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionwwithSession_start()和stordoredAtain $ _session.2)

您如何循环中存储在PHP会话中的所有值?您如何循环中存储在PHP会话中的所有值?Apr 26, 2025 am 12:06 AM

在PHP中,遍历会话数据可以通过以下步骤实现:1.使用session_start()启动会话。2.通过foreach循环遍历$_SESSION数组中的所有键值对。3.处理复杂数据结构时,使用is_array()或is_object()函数,并用print_r()输出详细信息。4.优化遍历时,可采用分页处理,避免一次性处理大量数据。这将帮助你在实际项目中更有效地管理和使用PHP会话数据。

说明如何使用会话进行用户身份验证。说明如何使用会话进行用户身份验证。Apr 26, 2025 am 12:04 AM

会话通过服务器端的状态管理机制实现用户认证。1)会话创建并生成唯一ID,2)ID通过cookies传递,3)服务器存储并通过ID访问会话数据,4)实现用户认证和状态管理,提升应用安全性和用户体验。

举一个如何在PHP会话中存储用户名的示例。举一个如何在PHP会话中存储用户名的示例。Apr 26, 2025 am 12:03 AM

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

哪些常见问题会导致PHP会话失败?哪些常见问题会导致PHP会话失败?Apr 25, 2025 am 12:16 AM

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

您如何在PHP中调试与会话相关的问题?您如何在PHP中调试与会话相关的问题?Apr 25, 2025 am 12:12 AM

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

如果session_start()被多次调用会发生什么?如果session_start()被多次调用会发生什么?Apr 25, 2025 am 12:06 AM

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

您如何在PHP中配置会话寿命?您如何在PHP中配置会话寿命?Apr 25, 2025 am 12:05 AM

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。