我有一些源代码或 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)来处理来自客户端的请求。然后,我们使用 Passenger 的 HTTP 代理 将应由 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/
我正在学习如何使用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
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类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
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
这似乎应该有一个直截了当的答案,但在Google上花了很多时间,所以我找不到它。这可能是缺少正确关键字的情况。在我的RoR应用程序中,我有几个模型共享一种特定类型的字符串属性,该属性具有特殊验证和其他功能。我能想到的最接近的类似示例是表示URL的字符串。这会导致模型中出现大量重复(甚至单元测试中会出现更多重复),但我不确定如何让它更DRY。我能想到几个可能的方向...按照“validates_url_format_of”插件,但这只会让验证干给这个特殊的字符串它自己的模型,但这看起来很像重溶液为这个特殊的字符串创建一个ruby类,但是我如何得到ActiveRecord关联这个类模型
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我的目标是转换表单输入,例如“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看起来疯狂不安全。所以,功能正常,
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我正在尝试使用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请求没有正确的命名空间。任何人都可以建议我