Ruby on rails 3.2 Rails教程;Rails环境

Ruby on rails 3.2 Rails教程;Rails环境,ruby-on-rails-3.2,railstutorial.org,Ruby On Rails 3.2,Railstutorial.org,我正在学习Hartl的RubyonRails教程,偶然发现了一个与开发和测试环境运行方式不同有关的问题 简单地说,这两个环境是不同步的。开发环境似乎正常工作,但是正在进行的一些更改没有传播到测试环境 例如,在application.html.erb中进行编辑将导致在测试环境中复制该更改。但是,在_header.html.erb中进行更改不会导致错误。这就是我注意到问题的原因——当我在浏览器中(在开发环境中)盯着它们看时,是否存在指向标题的新链接的测试失败了 在尝试解决这个问题时,我发现了另一个怪

我正在学习Hartl的RubyonRails教程,偶然发现了一个与开发和测试环境运行方式不同有关的问题

简单地说,这两个环境是不同步的。开发环境似乎正常工作,但是正在进行的一些更改没有传播到测试环境

例如,在application.html.erb中进行编辑将导致在测试环境中复制该更改。但是,在_header.html.erb中进行更改不会导致错误。这就是我注意到问题的原因——当我在浏览器中(在开发环境中)盯着它们看时,是否存在指向标题的新链接的测试失败了

在尝试解决这个问题时,我发现了另一个怪癖:如果我使用
rails server--environment test
在测试环境中运行本地服务器,并启动浏览器,那么应用程序仍然是“固定”的。我的意思是,对应用程序代码或HTML/CSS文件所做的任何更改都不会在浏览器中复制。要查看任何更改,必须关闭并重新打开本地服务器。然后加载测试环境,其中包含可查看的更改

这两个环境数据库是相同的(我在整个教程中添加迁移时运行了
rake db:migrate
rake db:test:prepare
,并通过sqlite 3查看器确认了数据库是相同的)

我想这个问题源于我对Rails环境的一些基本误解,任何帮助都将不胜感激


为了完整起见,当我第一次注意到这个问题时,我正在阅读第8章(添加登录/注销身份验证)。

通常,生产环境中的rails不提供静态文件(如HTML和CSS),如果要这样做,应该在production.rb中这样说:

 config.serve_static_assets = true
但如果您运行生产,您应该使用诸如Apache或NginX之类的Web服务器来运行它
在这种情况下,他们负责提供静态文件。

您注意到不同环境有不同的行为是正确的只有开发环境会在每次浏览器请求时重新加载应用程序。测试和生产环境基本上会缓存应用程序目录中的所有内容(请参阅)-基本上,它们只会记住服务器启动时的代码版本。这样做是为了提高性能和/或降低波动性。表现是有道理的,但波动性可能需要更多的解释

假设您同时运行测试和编辑代码。测试将在运行测试之前运行代码的版本,而不是在运行测试之后进行的任何更改。在测试过程中重新加载资产就像在高速公路上拆开一辆汽车,以60公里/小时的速度行驶。这取决于你要拆开什么,它可能会有很多意想不到的后果。可能不是灾难性的,但至少可能会危及测试的运行


如果您的问题是您的测试失败,因为它们没有针对最新版本的代码运行,那么您可能会遇到缓存问题——特别是如果您使用的是spork,Hartl的Rails教程上次推荐了spork。您可能需要简单地重新启动spork。

这没有多大意义。无论环境如何,在同一文件夹中启动服务器都将使用相同的文件。你确定你在同一个文件夹中吗?记住,有时PWD很棘手。