在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