Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 本地主机与开发和生产服务器的结果不一致_Ruby On Rails - Fatal编程技术网

Ruby on rails 本地主机与开发和生产服务器的结果不一致

Ruby on rails 本地主机与开发和生产服务器的结果不一致,ruby-on-rails,Ruby On Rails,下面的方法 if request.subdomains.empty? rurl = 'www.' + request.host else rurl = request.host end clean_host = rurl.chomp("/") Rails.logger.info clean_host @site = Site.where('host = ?', clean_host.to_s).first Rails.logger.

下面的方法

  if request.subdomains.empty?
    rurl = 'www.' + request.host  
  else
    rurl = request.host  
  end
  clean_host = rurl.chomp("/")
Rails.logger.info clean_host
  @site = Site.where('host = ?', clean_host.to_s).first
Rails.logger.info @site.inspect
在服务器上按设计运行。在localhost上,创建了一个虚拟
Site
对象来处理来自测试的请求。通过控制台进行验证:

irb(main):001:0> clean_host = "www.example.com"
=> "www.example.com"
irb(main):002:0> @site = Site.where('host = ?', clean_host.to_s).first
  Site Load (1.4ms)  SELECT "sites".* FROM "sites" WHERE (host = 'www.example.com') ORDER BY "sites"."id" ASC LIMIT $1  [["LIMIT", 1]]
=> #<Site id: 7, shop_id: 1, host: "www.example.com", name: "localhost", host_short: nil, logo: nil, controller: "localhost", layout: "application", created_at: "2021-06-01 11:09:10.261480000 +0200", updated_at: "2021-06-01 11:09:10.261480000 +0200">
test.log显示完全意外的结果。当测试向“www.example.com”主机发出请求时,控制器操作未处理该请求

www.example.com

Site Load (0.9ms)[0m  [1m[34mSELECT "sites".* FROM "sites" WHERE (host = 'www.example.com') ORDER BY "sites"."id" ASC LIMIT $1[0m  [["LIMIT", 1]]
[36mCACHE Site Load (0.0ms)[0m  [1m[34mSELECT "sites".* FROM "sites" WHERE (host = 'www.example.com') ORDER BY "sites"."id" ASC LIMIT $1[0m  [["LIMIT", 1]]

nil 
测试有一个设置块

 setup do
    @user = users(:end_consumer_phone)
    @site = sites(:thirty_one)
 end
使用以下夹具

thirty_one:
  id: 31
  shop_id: 31
  host: "example.com"
我错过了什么

rurl = 'www.' + request.host  
正在设置来自测试助手的请求,该请求

def setup
  host! 'example.com'
end
导致另一个字符串与夹具进行比较

host: "example.com"
固定装置修订为

host: "www.example.com"

相应地进行处理。教训:小心你的装置

测试
开发
不是同一个环境。在测试中,您应该在测试套件中设置此虚拟站点,例如(在rspec中)
let!(:dummy_site){site.find_或_create_by(host:“www.example.com”,name:“localhost”)}
我将minitest与设置块一起使用,其中
@site=sites(:dummy)
替换为
@site=site.find_或_create_by(host:“www.example.com”name:“localhost”)
返回与上面相同的结果…您需要实际创建
站点
您是否要查询数据库以获取它。这不是夹具的角色吗?我的问题被修正了,以表明我的错误。我在没有“www”的情况下测试请求时遇到了麻烦,因为我使用了一种方法来填充子域并重新加载fixture。
host: "www.example.com"