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"