我有Unicorn,Sidekiq和Postgres设置.
我试图了解正确的配置设置,以便我没有达到最大数据库连接限制.在Opsworks中,m1.small Postgres RDS实例最多可以有121个连接.
我的db池大小为5.
考虑一下.Sidekiq和Unicorn是它自己的过程.因此,每个进程的数据库池大小为5.如果我的理解错误,请纠正我.
如果我有5个独角兽进程',那意味着5*5 = 25个数据库连接
现在这是我有点困惑的部分,因为Sidekiq是多线程的.如果Sidekiq的并发度为5.并且db池大小也设置为5.这是否意味着在给定时间内有25个潜在的数据库连接?
这意味着,对于一个实例,我可以有50个db连接?
是否可以使用uploadify允许任何用户从文件对话框中选择文件并将其插入到表单的文件输入元素中?我只需要使用uploadify作为将"上传按钮"设置为图像的方式.
我还可以使用/做什么来将文件输入元素作为图像?
我希望我的文件输入按钮在所有浏览器中看起来都一致.
我在mongodb控制台尝试这个:
db.foobar.update(
{ name: "Foobar" },
{
$set : { foo: { bar: 'bar' },
$inc: { 'foo.count': 1 }
}
}, true)
Run Code Online (Sandbox Code Playgroud)
它返回"ok",但db.foobar.find()返回一个空记录集.我正在尝试upsert一个文档,所以它看起来像:
name: Foobar
foo: {
bar: 'bar'
count: 1
}
Run Code Online (Sandbox Code Playgroud)
如果doc不存在,则创建一个计数为1.否则,只需增加计数.为什么不在上面工作?
在Rails 3.1中,Sprockets用于管理资产并将它们打包成一个文件.总的来说,这不是一个坏主意.
引自外部来源,解释了手头的问题:
这种方法的一个问题是它可能会使调试变得更难,如果你必须查看生产中的"连接"CSS文件来理解包含的代码而不是,那么就更难知道什么来自哪里而不是你刚才包括原始源代码文件.
一种解决方案是有一种方法可以轻松地在"连接"和"正常"模式之间切换(可能已经可以,我不知道),因此正常开发将不受阻碍.但是你必须使用大型连接文件进行生产调试.
在Rails 3.0.X中,我们的设计人员可以使用Firebug轻松指出CSS设置,这将直接指示文件和行号,因为所有CSS文件都是独立的,而不是打包成一个.
或者我错过了这一点?
我想要的两件事:
a)我希望只有在API调用成功时才能在db中保存记录
b)我只想在db记录成功保存的情况下执行API调用
目标是使本地(在DB中)存储的数据与Stripe上的数据保持一致.
@payment = Payment.new(...)
begin
Payment.transaction do
@payment.save!
stripe_customer = Stripe::Customer.retrieve(manager.customer_id)
charge = Stripe::Charge.create(
amount: @plan.amount_in_cents,
currency: 'usd',
customer: stripe_customer.id
)
end
# https://stripe.com/docs/api#errors
rescue Stripe::CardError, Stripe::InvalidRequestError, Stripe::APIError => error
@payment.errors.add :base, 'There was a problem processing your credit card. Please try again.'
render :new
rescue => error
render :new
else
redirect_to dashboard_root_path, notice: 'Thank you. Your payment is being processed.'
end
Run Code Online (Sandbox Code Playgroud)
以上内容将起作用,因为如果记录(第5行)没有保存,则其余代码不会执行.
但是如果我需要在@paymentAPI调用之后保存的对象,那该怎么办呢,因为我需要@payment使用API结果中的值来分配对象.举个例子:
@payment = Payment.new(...)
begin
Payment.transaction do
stripe_customer = Stripe::Customer.retrieve(manager.customer_id) …Run Code Online (Sandbox Code Playgroud) ruby transactions ruby-on-rails stripe-payments ruby-on-rails-4
目前在我的应用程序中,我有项目和用户的概念.现在我想为这些实现一个帐户范围,以便项目和用户都属于一个帐户,而不是特别没有.通过这样做,我想像我这样的范围:
scope ":account_id" do
resources :projects
...
end
Run Code Online (Sandbox Code Playgroud)
但是,通过scope使用命名参数实现路由,这会更改路由助手的执行方式,以便project_path路由助手现在需要两个参数,一个用于account_id参数,另一个用于id参数,如下所示:
project_path(current_account, project)
Run Code Online (Sandbox Code Playgroud)
这个微小的 scope变化要求我在控制器和视图中对应用程序进行大量更改,以便我使用这些路径助手.
当然,当然,有一个干净的方法可以做到这一点,而无需更改应用程序中的每个路由助手?
在Rails 3.0.X中,我将我的flash文件存储在public/flash中.Flash文件,例如:jwplayer,uploadify等.
随着3.1中新目录结构的引入(即app/assets /),flash文件是否仍然存储在public/flash中,还是应该在app/assets /中创建一个名为'flash'的新目录?
在我的开发机器上,我可以输入resque-web一个控制台,它会在我的浏览器上启动一个显示Resque界面的新选项卡.
在Heroku,Cedar堆栈上,我怎么能做同样的事情?即我想看看Resque的界面为我的Heroku应用程序.
编辑
在 config/initializers/resque.rb
require 'resque'
require 'resque/server'
uri = URI.parse(APP_CONFIG['redis_to_go_url'])
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
# Load all jobs at /app/jobs
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }
Run Code Online (Sandbox Code Playgroud)
在 routes.rb
mount Resque::Server.new, :at => '/resque'
Run Code Online (Sandbox Code Playgroud)
一切正常.我现在能够看到Resque Web界面.但是,我想保护这一点不受公众的欢迎.可能使用用户名和密码.如何才能做到这一点?
我有一个锚链接
<a href="http://bucket_name.amazonaws.com/uploads/users/4/songs/7/test.mp3">Download</a>
Run Code Online (Sandbox Code Playgroud)
如何在用户点击它时这样做,它实际上会打开一个弹出窗口,要求用户保存文件而不是尝试在浏览器上播放文件?
编辑:
我正在读这篇文章.
def download
data = open(Song.first.attachment)
send_data data.read, :type => data.content_type, :x_sendfile=>true
end
Run Code Online (Sandbox Code Playgroud)
本文建议使用x_sendfile,因为send_file会占用一个http进程,可能会挂起应用程序直到下载完成.
其次,我使用send_data而不是send_file,如果文件是远程的(即在Amazon S3上托管),这似乎有效.正如本文所述.
我提到的那篇文章是在2009年发布的.是否还需要x_sendfile => true?如果不包含应用程序,它会挂起吗?
我真的应该使用send_data还是send_file?
我的表单中有以下代码.
<%= f.datetime_select(:date_time, :prompt => {:day => 'Day', :month => 'Month', :year => 'Year'}, :start_year => Date.today.year, :end_year => Date.today.year + 2, :minute_step => 15, :include_blank => false) %> if either one is blank.
Run Code Online (Sandbox Code Playgroud)
当其中一个字段留空时,我得到:
1 error(s) on assignment of multiparameter attributes
Run Code Online (Sandbox Code Playgroud)
正在传递的参数是:
{"utf8"=>"?",
"authenticity_token"=>"kQpfsj5RxnDtxkvBdwPEFnX1fY6euKnMQeDRAkvJvIE=",
"event"=>{"description"=>"",
"venue"=>"",
"street"=>"",
"city"=>"",
"country_id"=>"",
"date_time(1i)"=>"",
"date_time(2i)"=>"",
"date_time(3i)"=>"",
"date_time(4i)"=>"00",
"date_time(5i)"=>"00",
"ticket_url"=>""},
"x"=>"94",
"y"=>"12"}
Run Code Online (Sandbox Code Playgroud)
有人知道为什么会这样吗?
在这个链接上似乎有一个"脏"修复,但也许在Rails 3中有一个更好的解决方案?
postgresql ×2
file-upload ×1
flash ×1
heroku ×1
javascript ×1
jquery ×1
mongodb ×1
resque ×1
routes ×1
ruby ×1
sidekiq ×1
sprockets ×1
transactions ×1
unicorn ×1
uploadify ×1