在ubuntu上运行rails和apache的应用程序

问题描述:

我有一些源代码或rails项目,我需要在本地机器上运行。其实在Ubuntu虚拟机上。在ubuntu上运行rails和apache的应用程序

我不知道我需要什么来安装和配置才能在本地运行它。有没有一种标准的方法可以在整个源代码中找到它?

我发现应用程序在开发环境和生产环境中使用SQL Lite。

从配置/ Ruby和Rails的database.rb

# MySQL. Versions 4.1 and 5.0 are recommended. 
# 
# Install the MySQL driver: 
# gem install mysql2 
# 
# And be sure to use new-style password hashing: 
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html 
development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 

staging: 
    adapter: mysql2 
    database: appname_staging 
    username: rails 
    password: somepassword 
    host: localhost 

production: 
    adapter: mysql2 
    database: appname_production 
    username: rails 
    password: somepassword 
    host: localhost 

而且我已经设置正确的版本,并与RVM安装。我知道版本是正确的,因为.ruby-gemset .ruby-version文件。此外,我确实安装了成功安装Gemfile的所有宝石。

红宝石-v =>红宝石1.9.3p551 导轨-v => 3.2.13

的apache2 -v =>服务器版本:阿帕奇/ 2.4.7(Ubuntu的) Server内置:2015年10月14日14 :18:用于使用的readline 6.3

lsb_release -a =>没有LSB模块可用Debian的Linux-GNU(i686的)49

MySQL的-V =>的MySQL版14.14 DISTRIB 46年5月5日, 。 经销商ID:Ubuntu的 说明:Ubuntu的LTS 14.04.3发布 :14.04 代号:值得信赖的

这是相当多的地方我的专长停止。我不确定哪个Web服务器应用程序应该使用。它是否在源代码中预定义?

我发现有使用apache,乘客和月光。

从应用程序/清单/ application_manifest.rb

# The default_stack recipe install Rails, Apache, Passenger, the database from 
    # database.yml, Postfix, Cron, logrotate and NTP. See lib/moonshine/manifest/rails.rb 
    # for details. To customize, remove this recipe and specify the components you want. 
    recipe :default_stack 
    recipe :ssh 

我也不能确定究竟是什么每个这些的目的,个别。

apache作为web服务器如何识别和解释ruby代码?

我会很高兴,如果我可以在Apache上承载任何rails应用程序。我创建了一些非常简单的应用程序,并尝试这些步骤https://www.linode.com/docs/websites/ror/ruby-on-rails-with-apache-on-ubuntu-10-04-lucid,但它始终打开默认的apache网页。

我不是从哪里开始。我只是有一堆问题和很多困惑。我不明白apache上的ROR实际上是如何工作的。

乘客是apache上解释ruby代码的东西吗?

我发现nginx是乘客的替代品,但它也是apache的替代品,它让我更加困惑。

感谢您的任何帮助。

应用程序使用的Web服务器未预定义,可根据您的部署需求进行选择。有很多不同的选择,但在开始担心哪个服务器是生产环境的最佳选择之前,我建议您尝试使用WEBRick运行应用程序,这是一个简单的ruby HTTP服务器,它是Ruby标准库的一部分。这是十分容易上手:从应用程序的根目录,包含Rake文件和Gemfile中的一个,执行:

rake db:setup # setup an sqlite database for development
rails server # start the development server

(请注意,如果你还没有拥有它,您需要安装SQLite sudo apt-get install sqlite3 libsqlite3-dev

从那里开始,Moonshine是一个部署自动化工具。它可以帮助您将应用程序部署到生产服务器,但它不是应用程序的组成部分。

Phusion Passenger是你的问题的答案“apache作为web服务器如何识别和解释ruby代码?”但是,这不仅仅适用于Apache;它可以单独使用,也可以与nginx一起使用。在任何情况下,Web服务器(Apache,nginx或者独立模式下的嵌入式服务器)都会接受请求并将其传递给Passenger,然后将其“转换”为Rails可以理解并传递的标准格式。个人而言,如果您只是想熟悉Rails,并没有针对Apache的特定理由,那么我会从独立模式开始,因为它更容易设置。无论哪种方式,他们的Quickstart and Deployment Guides都非常出色。

Postfix是一个SMTP服务器;您需要它(或其他SMTP服务器)从Rails应用程序发送电子邮件,但严格来说,它不需要安装在与Rails相同的服务器上,并且如果您不打算发送电子邮件根本不需要它。

Cron,logrotate和NTP都是系统管理工具。 Rails中的任何内容都不依赖于它们中的任何一个,尽管可能会选择特定的应用程序。 Logrotate可以检查日志文件,NTP用于确保系统时钟有适当的时间,而cron用于按计划运行任务。 Moonshine默认设置它们,但完全有可能你并不需要它们,特别是如果你只是在测试Rails应用程序。

最后,你提到了MySQL的安装,但仅仅安装MySQL是不够的;您还需要设置数据库表。幸运的是,这在生产环境中并不比开发更困难;假设你在database.yml中的mysql配置指向你的实际的MySQL安装,并且有一个有效的用户名和密码,你可以运行RAILS_ENV=production rake db:setup来实现。不过,我建议首先使用sqlite数据库以开发模式开始,以保​​持简单。

网络是一个非常并发的环境。 生产网络服务器Apache可以同时处理多个请求 - 甚至数十或数百个请求 - 。一个单一进程,基于Ruby的web服务器不可能跟上,幸运的是它不需要。

相反,我们部署Rails应用程序投入生产的方法是使用一个前端服务器,比如Apache,以处理来自客户端的请求。然后,我们使用的HTTP代理乘客将Rails应该处理的请求发送到任意数量的后端应用程序进程之一。

我假设您已经安装了Apache Web服务器并且它正在您的机器上运行。

运行下面的命令来安装客运

$ gem install passenger -v 5.0.30 
$ passenger-install-apache2-module 

如果必要的依赖得不到满足,后者命令将告诉你需要做什么。如果发生这种情况,请按照提供的说明,然后再次尝试Passenger安装命令。

在此过程中,它会要求您更新您的Apache配置。第一个请求将启用您新建的模块,其中包括向您的Apache配置中添加以下行。

LoadModule passenger_module /home/devel/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/passenger-5.1.5/buildout/apache2/mod_passenger.so 
<IfModule mod_passenger.c> 
    PassengerRoot /home/devel/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/passenger-5.1.5 
    PassengerDefaultRuby /home/devel/.rbenv/versions/2.4.0/bin/ruby 
</IfModule> 

注意:乘客会告诉你确切的行复制并粘贴到这个文件,所以使用这些,不是这些)

要找出你的Apache配置文件,尝试发行下面的命令:

$ apachectl -V | grep HTTPD_ROOT 
$ apachectl -V | grep SERVER_CONFIG_FILE 

部署应用程序

上一步每个服务器只需要完成一次,这一步实际上是每个应用程序一次。在下面用您的主机的名称,应用程序的目录路径,和密钥:

<VirtualHost *:80> 
    ServerName depot.yourhost.com 
    DocumentRoot /home/devel/depot/public/ 
    SetEnv SECRET_KEY_BASE "abcdef" 
    SetEnv DEPOT_DATABASE_PASSWORD "some-password" 
    <Directory /home/devel/depot/public/> 
    AllowOverride all 
    Options -MultiViews 
    Require all granted 
    </Directory> 
</VirtualHost> 

使用下面的命令来产生一个合适的密钥用作秘密。此密钥用于加密发送给客户端的Cookie。

$ bin/rails secret 

这里我们使用SetEnv指令来定义环境变量,而不是让我们的配置文件中的密钥和数据库密码 生产模式。

的最后一步,就是重新启动我们的Apache Web服务器:正如你说,你用sqlite数据库,以便在Gemfile中添加gem 'sqlite3',然后再运行安装bundle

$ sudo apachectl restart 

然后,您必须创建数据库并运行所有迁移才能添加表。

命令:

rake db:create 
rake db:migrate 

接下来,启动服务器

命令:

rails server