草庐IT

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

coder 2023-10-13 原文

我有一些源代码或 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 文件。我也做了 bundle install 并成功安装了 Gemfile 中的所有 gem。

ruby -v => ruby 1.9.3p551 轨道 -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, 对于 debian-linux-gnu (i686) 使用 readline 6.3

lsb_release -a => 没有可用的 LSB 模块。 经销商 ID:Ubuntu 描述:Ubuntu 14.04.3 LTS 发布:14.04 代号:可信赖

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

我发现使用了 apache、passenger 和 moonshine。

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

我也不确定每一个的确切目的是什么。

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

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

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

passenger 是 apache 上解释 ruby​​ 代码的东西吗?

我表明 nginx 是 passenger 的替代品,但它也是 apache 的替代品,这让我更加困惑。

感谢您的帮助。

最佳答案

Web 是一个高度并发的环境。 生产 Web 服务器,例如 Apache 可以同时处理多个请求——甚至数十个或数百个请求。单进程、基于 Ruby 的网络服务器不可能跟上,幸运的是它不必。

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

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

运行以下命令以安装 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>

(注意:Passenger 会告诉您要复制并粘贴到此文件中的确切行,因此请使用那些,而不是这些)

要找出 Apache 配置文件的位置,请尝试发出以下命令:

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

部署应用程序

上一步只需要为每个服务器做一次,这一步实际上是每个应用程序一次。在以下内容中替换您的主机名、应用程序的目录路径和 key :

<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>

使用以下命令生成一个合适的 key 作为 secret 。此 key 用于加密发送到客户端的 cookie。

$ bin/rails secret

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

最后一步是重新启动我们的 Apache Web 服务器:

$ sudo apachectl restart

关于mysql - 在 ubuntu 上使用 apache 和 passenger 运行 rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33573972/

有关mysql - 在 ubuntu 上使用 apache 和 passenger 运行 rails 应用程序的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  4. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  5. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  6. ruby-on-rails - rails : keeping DRY with ActiveRecord models that share similar complex attributes - 2

    这似乎应该有一个直截了当的答案,但在Google上花了很多时间,所以我找不到它。这可能是缺少正确关键字的情况。在我的RoR应用程序中,我有几个模型共享一种特定类型的字符串属性,该属性具有特殊验证和其他功能。我能想到的最接近的类似示例是表示URL的字符串。这会导致模型中出现大量重复(甚至单元测试中会出现更多重复),但我不确定如何让它更DRY。我能想到几个可能的方向...按照“validates_url_format_of”插件,但这只会让验证干给这个特殊的字符串它自己的模型,但这看起来很像重溶液为这个特殊的字符串创建一个ruby​​类,但是我如何得到ActiveRecord关联这个类模型

  7. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  8. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  9. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  10. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

随机推荐