小编fgu*_*len的帖子

Ruby,如何将一个param添加到一个你不知道它是否已经有任何其他param的URL

我必须在不确定的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&param=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&param=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&param=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)

ruby url params

14
推荐指数
1
解决办法
9578
查看次数

从TestCase调用Sinatra应用程序实例方法

我在一个Sinatra应用程序中有一个util方法,我想从我的测试中进行测试TestCase.

问题是我不知道如何调用它,如果我只是使用app.util_method我有错误NameError: undefined local variable or method 'util_method' for #<Sinatra::ExtendedRack:0x007fc0c43305b8>

my_app.rb:

class MyApp < Sinatra::Base
  # [...] routes methods

  # utils methods
  def util_method
    return "hi"
  end
end
Run Code Online (Sandbox Code Playgroud)

my_app_test.rb:

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)

ruby rack sinatra

13
推荐指数
1
解决办法
3542
查看次数

AWS :: S3重命名文件夹

我看到有一个,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文件夹.

ruby amazon-s3

12
推荐指数
1
解决办法
9403
查看次数

Backbone.js奇异模型不在集合中

作为Backbone.js的新手,只是想澄清一下这个简单任务的正确方法.

几乎总是开发一个Web应用程序,您将拥有用户帐户,用户可以登录到您的应用程序,并查看他们的个性化数据.通常,他们的页面可能会显示一些小部件,他们的用户信息(名称,头像等).

现在,为每个小部件创建一个模型并将它们分组到一个Collection中是一个简单的概念.但是,他们的用户信息是否会存储在一个单独的模型中,这不会是一个集合的一部分?

如果是这样,如何与应用程序的其余部分联系起来?请原谅我的无知,但是我还没有遇到任何不解释模型的例子,这些模型不在集合中使用它们(用户和用户,狗,猫和动物等)

无论如何,对于长篇解释感到遗憾.我会寻找任何资源让我开始制作一个真实世界的应用程序,而不是ToDo应用程序(这对于基本概念理解非常有用)

javascript model-view-controller backbone.js web

12
推荐指数
1
解决办法
3004
查看次数

jQuery UI - 可拖动的'snap'事件

我正在寻找绑定snap事件的方法.

当我拖着一个元素在我的面和可拖动的元素被抢购的声明对齐位置我想触发一个事件.

像这样的东西:

$(".drag").draggable({
  snap: ".grid",
  snaped: function( event, ui ) {}
});
Run Code Online (Sandbox Code Playgroud)

奖金点:与所述的参考.grid,其中所述元件可拖动元件折断.

jquery-ui jquery-ui-draggable

12
推荐指数
1
解决办法
1万
查看次数

Rails不会在反序列化YAML/Marshal对象时加载类

  • Rails:3.0.3
  • Ruby:1.9.2

尝试使用YAML.loadMarshal.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)

ruby-on-rails classloader deserialization

11
推荐指数
1
解决办法
4459
查看次数

如何知道Puma中活动线程的数量

我试图在我的服务器上看到活跃的美洲豹线程数.

我看不透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)

shell monitoring puma

11
推荐指数
2
解决办法
2112
查看次数

Rails,ActiveJobs和AWS SQS:当一个worker实例被杀时,我的工作会发生什么?

我们使用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

11
推荐指数
1
解决办法
370
查看次数

"heroku运行耙资产:干净"不会清理任何东西

我执行

$ 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)

我需要删除资产,因为它们与我的新配置产生冲突.

ruby-on-rails heroku asset-pipeline

10
推荐指数
1
解决办法
4993
查看次数

事件发生两次

我正在声明一个这样的视图:

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

问题是当选择事件被触发时,所选功能被调用两次?

backbone.js backbone-events backbone-views

8
推荐指数
1
解决办法
7579
查看次数