我必须在不确定的URL中添加一个新的参数param=value.
如果实际的URL已经像这样params
http://url.com?p1=v1&p2=v2
Run Code Online (Sandbox Code Playgroud)
我应该将URL转换为另一个:
http://url.com?p1=v1&p2=v2¶m=value
Run Code Online (Sandbox Code Playgroud)
但是如果URL没有任何参数,那么:
http://url.com
Run Code Online (Sandbox Code Playgroud)
我应该将URL转换为另一个:
http://url.com?param=value
Run Code Online (Sandbox Code Playgroud)
我觉得用Regex解决这个问题很担心,因为我不确定寻找存在&就足够了.我想也许我应该将URL转换为URI对象,然后添加param并再次将其转换为String.
寻找已经处于这种情况的人的任何建议.
为了帮助参与,我正在共享一个基本的测试套件:
require "minitest"
require "minitest/autorun"
def add_param(url, param_name, param_value)
# the code here
"not implemented"
end
class AddParamTest < Minitest::Test
def test_add_param
assert_equal("http://url.com?param=value", add_param("http://url.com", "param", "value"))
assert_equal("http://url.com?p1=v1&p2=v2¶m=value", add_param("http://url.com?p1=v1&p2=v2", "param", "value"))
assert_equal("http://url.com?param=value#&tro&lo&lo", add_param("http://url.com#&tro&lo&lo", "param", "value"))
assert_equal("http://url.com?p1=v1&p2=v2¶m=value#&tro&lo&lo", add_param("http://url.com?p1=v1&p2=v2#&tro&lo&lo", "param", "value"))
end
end
Run Code Online (Sandbox Code Playgroud) 我在一个Sinatra应用程序中有一个util方法,我想从我的测试中进行测试TestCase.
问题是我不知道如何调用它,如果我只是使用app.util_method我有错误NameError: undefined local variable or method 'util_method' for #<Sinatra::ExtendedRack:0x007fc0c43305b8>
class MyApp < Sinatra::Base
# [...] routes methods
# utils methods
def util_method
return "hi"
end
end
Run Code Online (Sandbox Code Playgroud)
require "my_app.rb"
require "test/unit"
require "rack/test"
class MyAppTest < Test::Unit::TestCase
include Rack::Test::Methods
def app
MyApp.new
end
# [...] routes methods tests
def test_util_method
assert_equal( "hi", app.util_method )
end
end
Run Code Online (Sandbox Code Playgroud) 我看到有一个,AWS::S3::S3Object.rename但我不能用文件夹做:
AWS::S3::Base.establish_connection!(
:access_key_id => APP_CONFIG[:s3_access_key_id],
:secret_access_key => APP_CONFIG[:s3_secret_access_key]
)
AWS::S3::S3Object.rename(
"assets/old_name_folder",
"assets/new_name_folder",
APP_CONFIG[:s3_bucket]
)
Run Code Online (Sandbox Code Playgroud)
该old_name_folder包含文件和文件夹,我想改名尊重这一点.
我正在获得: AWS::S3::NoSuchKey (The specified key does not exist.)
我不知道我做错了什么,或者只是不能重命名s3文件夹.
作为Backbone.js的新手,只是想澄清一下这个简单任务的正确方法.
几乎总是开发一个Web应用程序,您将拥有用户帐户,用户可以登录到您的应用程序,并查看他们的个性化数据.通常,他们的页面可能会显示一些小部件,他们的用户信息(名称,头像等).
现在,为每个小部件创建一个模型并将它们分组到一个Collection中是一个简单的概念.但是,他们的用户信息是否会存储在一个单独的模型中,这不会是一个集合的一部分?
如果是这样,如何与应用程序的其余部分联系起来?请原谅我的无知,但是我还没有遇到任何不解释模型的例子,这些模型不在集合中使用它们(用户和用户,狗,猫和动物等)
无论如何,对于长篇解释感到遗憾.我会寻找任何资源让我开始制作一个真实世界的应用程序,而不是ToDo应用程序(这对于基本概念理解非常有用)
我正在寻找绑定snap事件的方法.
当我拖着一个元素在我的面和可拖动的元素被抢购的声明对齐位置我想触发一个事件.
像这样的东西:
$(".drag").draggable({
snap: ".grid",
snaped: function( event, ui ) {}
});
Run Code Online (Sandbox Code Playgroud)
奖金点:与所述的参考.grid,其中所述元件可拖动元件折断.
尝试使用YAML.load或Marshal.load生成损坏的对象反序列化一个非常简单的对象,因为在反序列化过程中不需要属于的类.
例:
# app/models/my_model.rb
class MyModel
attr_accessor :id
end
# test/unit/serializing_test.rb
require 'test_helper'
class SerializingTest < Test::Unit::TestCase
def test_yaml_serialize_structure
my_model = MyModel.new
my_model.id = 'my model'
File.open( "#{Rails.root}/tmp/object.yml" , 'w' ) do |f|
YAML::dump(my_model, f)
end
end
def test_yaml_deserialize_structure
object = YAML.load_file "#{Rails.root}/tmp/object.yml"
assert( object.instance_of? MyModel )
assert_equal( 'my model', object.id )
end
end
Run Code Online (Sandbox Code Playgroud)
使用此代码,我们可以运行此shell控制台会话而不会出现任何错误
$ ruby -Itest test/unit/serializing_test.rb -n test_yaml_serialize_structure
$ ruby -Itest test/unit/serializing_test.rb -n test_yaml_deserialize_structure
Run Code Online (Sandbox Code Playgroud)
但是如果我从Rails控制台运行反序列化调用,则对象不会被正确反序列化,因为该类永远不需要:
$ rails c
ruby-1.9.2-p0 …Run Code Online (Sandbox Code Playgroud) 我试图在我的服务器上看到活跃的美洲豹线程数.
我看不透ps:
$ ps aux | grep puma
healthd 2623 0.0 1.8 683168 37700 ? Ssl May02 5:38 puma 2.11.1 (tcp://127.0.0.1:22221) [healthd]
root 8029 0.0 0.1 110460 2184 pts/0 S+ 06:34 0:00 grep --color=auto puma
root 18084 0.0 0.1 56836 2664 ? Ss May05 0:00 su -s /bin/bash -c puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
webapp 18113 0.0 0.8 83280 17324 ? Ssl May05 0:04 puma 2.16.0 (unix:///var/run/puma/my_app.sock) [/]
webapp 18116 3.5 6.2 784992 128924 ? Sl May05 182:35 puma: …Run Code Online (Sandbox Code Playgroud) 我们使用Rails 5.0.2和ActiveJobs在AWS魔豆与SQS与宝石后端active_elastic_job.
我们的工作定义如下:
class MyJob < ActiveJob::Base
rescue_from(StandardError) do |exception|
self.class.set(:wait => 1.minutes).perform_later
end
def perform
MyLongTask.run
end
end
Run Code Online (Sandbox Code Playgroud)
我们经历过,当工作环境中的一个实例被杀死(由于自动缩放或某种原因)时,rescue_from不会执行该操作,并且不会将作业发送回队列.
我们怎样才能捕获实例被调用被杀的那一刻,这样我们才能在我的进程真正被杀之前优雅地做出反应和包裹?(如果可能的话)
我正在尝试这个
class MyJob < ActiveJob::Base
def perform
begin
sleep(100)
rescue SignalException => e
# send signal to some log place
raise e
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我终止实例时,日志永远不会发送,因为我没有杀死美洲狮进程$ restart puma
ruby-on-rails amazon-sqs amazon-web-services amazon-elastic-beanstalk rails-activejob
我执行
$ heroku run rake assets:clean
Running `rake assets:clean` attached to terminal... up, run.2
/usr/local/bin/ruby /app/vendor/bundle/ruby/1.9.1/bin/rake assets:clean:all RAILS_ENV=production RAILS_GROUPS=assets
rm -rf /app/public/assets
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用,因为我可以通过http请求访问资产,如果我打开一个heroku控制台,我可以看到文件:
$ heroku run console
irb(main):013:0> Dir.glob "./public/assets/*"
=> ["./public/assets/img", "./public/assets/application.js.gz", "./public/assets/application.js", "./public/assets/rails.png", "./public/assets/manifest.yml", "./public/assets/application.css", "./public/assets/assets", "./public/assets/application.css.gz"]
Run Code Online (Sandbox Code Playgroud)
我需要删除资产,因为它们与我的新配置产生冲突.
我正在声明一个这样的视图:
var VirtualFileSelectorView = Backbone.View.extend({
selected: function() {
console.log("selected function");
},
initialize: function() {
// Shorthand for the application namespace
var app = brickpile.app;
// bind to the selected event
app.bind('selected', this.selected, this);
}
});
Run Code Online (Sandbox Code Playgroud)
然后我实例化了这个View的两个实例,你可以在这里看到:http://cl.ly/H5WI
问题是当选择的事件被触发时,所选的功能被调用两次?
ruby ×3
backbone.js ×2
amazon-s3 ×1
amazon-sqs ×1
classloader ×1
heroku ×1
javascript ×1
jquery-ui ×1
monitoring ×1
params ×1
puma ×1
rack ×1
shell ×1
sinatra ×1
url ×1
web ×1