我希望capistrano用--trace调用rake,这样我就可以弄清楚它失败的原因.我该怎么做呢?set :rake 'rake --trace'不起作用.
我有一个用于delayed_job任务的专用服务器.我要开始,停止和重新启动delayed_job的工人只有这台服务器.我正在使用delayed_job提供的capistrano食谱.
当我只有1台服务器时,这是我的配置:
before "deploy:restart", "delayed_job:stop"
after "deploy:restart", "delayed_job:start"
after "deploy:stop", "delayed_job:stop"
after "deploy:start", "delayed_job:start"
Run Code Online (Sandbox Code Playgroud)
现在我想让这些钩子只适用于一个单独的delayed_job服务器(role :delayed_job <ip address>).这可能是优雅的吗?我是否必须在meta任务中包装每个delayed_job任务?或者编写我自己的任务而不是使用延迟工作提供的任务?
是否可以锁定一个表,使得持有者可以读写,而其他会话只能读取?
该文档似乎暗示读锁允许每个人只读,而写锁只允许持有者读写,而其他会话无法访问.似乎让持有者能够读写,而其他只能读取的会话将是一种非常常见的行为 - 也许是最常需要的行为.
也许在实施这种情况时遇到的性能太高了?
我已经在网上阅读了大量关于不同版本的ruby和rails中的线程安全性和性能的材料,我想我现在对这些事情了解得很清楚.
讨论中似乎奇怪的是如何实际部署异步Rails应用程序.在谈论应用程序中的线程和同步时,人们想要优化两件事:
第1点是人们(正确地)对JRuby感到兴奋的地方.对于这个问题,我只想优化第2点.
说这是我的应用程序中唯一的控制器:
TheController < ActionController::Base
def fast
render :text => "hello"
end
def slow
render :text => User.count.to_s
end
end
Run Code Online (Sandbox Code Playgroud)
fast没有IO,每秒可以服务数百或数千个请求,并且slow必须通过网络发送请求,等待工作完成,然后通过网络接收答案,因此要慢得多fast.
因此,理想的部署将允许在请求等待IO时fast满足数百个请求slow.
围绕Web的讨论似乎缺少的是堆栈的哪一层负责实现这种并发.thin有一个--threaded标志,它将"在线程中调用机架应用程序[实验]" - 是否为每个传入请求启动一个新线程?在持久存在并等待传入请求的线程中假装机架应用程序实例?
瘦是唯一的方式还是其他人?ruby运行时是否对优化第2点很重要?
我想使用pytest monkeypatch插件,但我无法弄清楚如何导入它.我试过了:
import monkeypathimport pytest.monkeypatchfrom pytest import monkeypatchRails 5.1系统测试的文档有点稀疏.我无法进行执行javascript运行的无头测试.我认为一种方法需要安装和运行xvf.但这比我在其他版本的rails中运行capybara时使用的手动设置更多.
实现这一目标最直接的方法是什么?
我正在动态插入<script>带有src属性且没有内容的标记.但是浏览器没有下拉src并在插入后运行脚本 - 标签就位于DOM中.
我可以告诉浏览器"运行"脚本标签吗?
由于我正在使用的其他代码,我更容易通过src属性保留代码而不是自己获取代码并将其插入到标记的正文中 - 但如果这是必要的,我也可以这样做(并欢迎任何建议).
更新请求的信息
document.getElementById("my-div").innerHTML = "the script tag, which stack overflow wants to strip";要在没有阻止表单的情况下执行Net :: HTTP https请求,您可以执行以下操作:
...
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
...
Run Code Online (Sandbox Code Playgroud)
但有没有办法告诉Net :: HTTP在执行块表单时使用https?
u = URI.parse(url)
Net::HTTP.start(u.host, u.port) do |http|
# if I put http.use_ssl = true here, ruby complains that this can't
# be done becuase the sesion has already started
resp = http.get(u.request_uri)
end
Run Code Online (Sandbox Code Playgroud)
我在红宝石1.8.7上
我想做一个upsert.Rails还不支持这个.查询是这样的:
INSERT INTO foos (thing_id, bar_id) VALUES (1, 2)
ON CONFLICT (thing_id, bar_id) DO NOTHING
Run Code Online (Sandbox Code Playgroud)
我可以用self.class.connection.execute或轻松做到这一点exec_insert.但我也希望利用准备好的陈述.我以为我可以这样做:
thing_id = ActiveRecord::Relation::QueryAttribute.new("thing_id", thing.id, ActiveRecord::Type::Integer.new)
bar_id = ActiveRecord::Relation::QueryAttribute.new("bar_id", id, ActiveRecord::Type::Integer.new)
self.class.connection.exec_insert(<<-SQL, nil, [thing_id, bar_id])
INSERT INTO foos (thing_id, bar_id) VALUES ($1, $2)
ON CONFLICT (thing_id, bar_id) DO NOTHING
SQL
Run Code Online (Sandbox Code Playgroud)
但是当我试验这个时,似乎没有创建一个准备好的语句.
我试过这种风格:
query = <<-SQL
INSERT INTO foos (thing_id, bar_id) VALUES ($1, $2)
ON CONFLICT (thing_id, bar_id) DO NOTHING
SQL
connection = ActiveRecord::Base.connection.raw_connection
connection.prepare('some_name', query)
st = connection.exec_prepared('some_name', [ …Run Code Online (Sandbox Code Playgroud) ruby ×4
capistrano ×2
activerecord ×1
bundler ×1
capybara ×1
delayed-job ×1
dom ×1
https ×1
javascript ×1
jquery ×1
mysql ×1
net-http ×1
postgresql ×1
pytest ×1
python ×1
rack ×1
rake ×1
sql ×1
ssl ×1
thin ×1
transactions ×1