mysql – 在ubuntu上用apache和passenger运行rails应用程序

我有一些源代码或rails项目,我需要在本地机器上运行.实际上在Ubuntu虚拟机上.

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

我发现应用程序在开发环境中使用SQL Lite,在生产环境中使用MySQL.

来自config / 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

我也设置了正确版本的ruby和rails并用rvm安装它.我知道版本是正确的,因为.ruby-gemset .ruby-version文件.我也成功安装了捆绑安装和Gemfile的所有宝石.

ruby -v =>ruby1.9.3p551
rails -v => 3.2.13

apache2 -v =>服务器版本:Apache / 2.4.7(Ubuntu)
              服务器内置:2015年10月14日14:18:49

mysql -V => mysql Ver 14.14 Distrib 5.5.46,
            对于使用readline 6.3的debian-linux-gnu(i686)

lsb_release -a =>没有LSB模块可用.
                  分销商ID:Ubuntu
                  说明:Ubuntu 14.04.3 LTS
                  发布:14.04
                  代号:值得信赖

这几乎是我的专业知识停止的地方.我不确定应该使用哪个Web服务器应用程序.它是在源代码中预定义的吗?

我发现有阿帕奇,乘客和月光被使用.

来自app / manifests / 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

我也不确定每个人的具体目的是什么.

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

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

我不是从哪里开始的.我只是有很多问题而且还有很多困难.我不明白apache上的ROR是如何工作的.

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

我表明nginx是乘客的替代品,但它也是apache的替代品,它让我更加困惑.

谢谢你的帮助.

最佳答案 Web是一个非常并发的环境.生产Web服务器(如Apache)可以同时处理多个请求 – 甚至数十或数百个请求.单进程,基于Ruby的Web服务器无法跟上,幸运的是它没有必要.

相反,我们将Rails应用程序部署到生产中的方式是使用前端服务器(如Apache)来处理来自客户端的请求.然后,我们使用Passenger的HTTP代理将应由Rails处理的请求发送到任意数量的后端应用程序进程之一.

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

运行以下命令安装Passenger:

$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 "0123456789abcdef"
  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服务器:

$sudo apachectl restart
点赞