小编aar*_*rkk的帖子

Capistrano在尝试部署Rails资产清单时失败

我正在尝试部署之前成功运行的Rails应用程序,但Capistrano在部署期间正在进行攻击.除了更改Rails应用程序代码本身和更新一些宝石之外,我不相信我已经改变了任何东西(即deploy.rb文件与曾经工作的设置相同.)

这是看起来失败的线:

executing "cp -- /u/apps/myapp/shared/assets/manifest.yml /u/apps/myapp/releases/unable/assets_manifest.yml"
Run Code Online (Sandbox Code Playgroud)

注意如何调用它试图复制到的目录unable.这就像它无法获得新版本的名称/日期或其他东西?但是之前它执行它没有错误:

executing "cd -- /u/apps/myapp/releases/20130507041223 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
Run Code Online (Sandbox Code Playgroud)

剩余的有趣输出是这样的:

** cp: cannot create regular file `/u/apps/myapp/releases/unable/assets_manifest.yml'
** No such file or directory
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'default' -c 'cp -- /u/apps/myapp/shared/assets/manifest.yml /u/apps/myapp/releases/unable/assets_manifest.yml'"
Run Code Online (Sandbox Code Playgroud)

更新:这似乎是Capistrano 2.15.4中的一个错误.降级到版本2.14.2解决了问题.我在这里详细说明了这个错误:

https://github.com/capistrano/capistrano/issues/468

capistrano ruby-on-rails

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

在派生的虚函数中强制执行正确的参数类型

我发现很难简洁地描述这个问题,所以我附上了演示程序的代码.

一般的想法是我们想要一组Derived类,它们被迫从Base类实现一些抽象的Foo()函数.每个派生的Foo()调用必须接受不同的参数作为输入,但所有参数也应该从BaseInput类派生.

到目前为止,我们看到了两种可能的解决方案,我们都不满意:

  1. 从基类中删除Foo()函数,并使用每个Derived类中的正确输入类型重新实现它.但是,这消除了在每个派生类中以相同方式实现它的强制执行.

  2. 在接收函数内部进行某种动态转换,以验证接收的类型是否正确.但是,这不会阻止程序员发出错误并传递错误的输入数据类型.我们希望传递给Foo()函数的类型是编译时正确的.

是否存在某种可以强制执行此类行为的模式?这整个想法是否打破了OOP背后的某种基本理念?我们非常希望听到您对我们提出的解决方案之外的可能解决方案的意见.

非常感谢!

#include <iostream>

// these inputs will be sent to our Foo function below
class BaseInput {};
class Derived1Input : public BaseInput { public: int   d1Custom; };
class Derived2Input : public BaseInput { public: float d2Custom; };

class Base
{
public:
    virtual void Foo(BaseInput& i) = 0;
};

class Derived1 : public Base
{
public:
    // we don't know what type the input is -- do we have to try to cast to what …
Run Code Online (Sandbox Code Playgroud)

c++ oop

7
推荐指数
1
解决办法
3349
查看次数

Ruby on Rails集成测试期间的间歇性ActiveRecord :: RecordNotFound

我有间歇性失败的集成测试,并且始终存在ActiveRecord::RecordNotFound错误.错误发生在控制器内部,在find给定来自夹具的ID的情况下进行调用.但它发生在多个控制器中.我在导航网站时从未看到过这种行为,但我认为测试会在30%到50%的时间内失败.失败后再次运行测试似乎可以解决问题.

如果我手动将夹具加载到开发数据库中,那么似乎找不到的ID确实存在于表中.

我一直无法找到有关同一问题的人的任何信息...任何想法?

更新:以下是test_helper.rb的内容

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'capybara/rails'
class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
  #
  # Note: You'll currently still have to declare fixtures explicitly in integration tests
  # -- they do not yet inherit this setting
  fixtures :all
  # Add more helper methods to be used by all tests here...
end
# Transactional fixtures do not work with Selenium tests, …
Run Code Online (Sandbox Code Playgroud)

activerecord integration-testing ruby-on-rails ruby-on-rails-3

7
推荐指数
1
解决办法
1734
查看次数

在Windows中使用OpenCV 2.4.4和FFmpeg

我知道在OpenCV中还有其他问题涉及FFmpeg的使用,但是大多数问题似乎已经过时了.

通过在CMake中打开makefile,我可以验证我已经WITH_FFMPEG开启了标志.我的OpenCV版本的输出文件夹包含一个bin文件夹,其中包含文件夹DebugRelease文件夹,每个文件夹都包含一个名为的.dll文件的副本opencv_ffmpeg244.dll.当我创建一个VideoWriter并验证指向.dll的函数指针是否正确填充时,我可以进入OpenCV的源代码.这似乎很有效.

如果我使用CV_FOURCC_PROMPT的FOURCC代码,则以下编解码器正常工作:

  • 微软视频1
  • 英特尔IYUV编解码器
  • 罗技视频(I420)
  • Radius的Cinepak编解码器
  • 全帧(未压缩)

以下编解码器无法正常工作(即生成0kb视频文件):

  • 微软RLE

如果我的理解是正确的,使用FFMPEG应该允许使用一大堆新的编解码器(x264,DIVX,XVID等)编码视频.但是,这些都不会出现在提示中.使用宏通过FOURCC代码手动设置它们CV_FOURCC(...)也不起作用.例如,使用此:CV_FOURCC('X','2','6','4')生成消息:

Could not find encoder for codec id 28: Encoder not found

并制作一个大小为0kb的视频文件.

使用此方法:不CV_FOURCC('X','V','I','D')产生任何错误消息,并生成6kb的视频文件,该文件无法在Windows Media Player或VLC中播放.

我尝试从Xvid.org手动下载Xvid编解码器.安装完成后,它会出现在提示符下的VFW选项下,并且编码正常.所以它接近一个解决方案,但如果我尝试直接设置FOURCC代码,它仍然会失败,如上所述!我每次都必须从提示中选择它.是不是FFmpeg应该包含一大堆编解码器?如果是这样,为什么我手动下载编解码器而不是使用FFmpeg内置的编解码器?

我在这里错过了什么?有没有办法检查FFMPEG是"启用"的?似乎提示中唯一可用的编解码器是VFW编解码器,而不是FFMPEG编解码器.在.dll已建成和正坐在同一文件夹中的可执行文件,但它似乎它不以任何方式使用.

这里有很多相关的问题.希望找到一些了解OpenCV中FFmpeg实现的人,并了解所有这些部分是如何组合在一起的.

windows opencv ffmpeg codec

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

Boost.Log无法设置日志记录过滤器(未声明标识符'严重性')

我正试图让Boost.Log进入我的项目.问题来自以下简单示例:

using namespace boost::log;
core::get()->set_filter
(
    trivial::severity >= trivial::info
);
Run Code Online (Sandbox Code Playgroud)

在我的代码中,这转换为以下内容:

boost::log::core::get()->set_filter(
  boost::log::trivial::severity >= boost::log::trivial::info
);
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

error C2039: 'severity' : is not a member of 'boost::log::v2s_mt_nt5::trivial'
error C2065: 'severity' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)

我正在搜索名称空间,试图找出我应该如何做到这一点,但我并没有找到任何有用的东西.看来这是一个疯狂的lambda功能.我有一些替代方案(定义一个填充过滤级别的函数?),但我不知道如何实现这一点.有任何想法吗?

我正在使用Boost.Log版本2.0-r862和Boost 1.53.0.

解决方案:瑞安指出,我应该检查我包括,果然我只是包括trivial.hpp,但core.hppexpressions.hpp还需要为包括.包括他们解决了这个问题.

// need at least these 3 to get "trivial" to work
#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/trivial.hpp>
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-log

7
推荐指数
1
解决办法
2636
查看次数

编译器之间的浮点不匹配(Visual Studio 2010和GCC)

我正在努力解决一个正在出现的跨平台问题,我不知道该怎么做.这是一个演示程序:

#include <cmath>
#include <cstdio>

int main()
{
    int xm = 0x3f18492a;
    float x = *(float*)&xm;
    x = (sqrt(x) + 1) / 2.0f;
    printf("%f %x\n", x, *(int*)&x);
}
Run Code Online (Sandbox Code Playgroud)

在VS2010中编译时,Windows上的输出是:

0.885638 3f62b92a

使用GCC 4.8.1 (ideone.com示例)编译时的输出是:

0.885638 3f62b92b

在需要在多个平台上运行相同的程序的过程中,这些小的不匹配最终会成为一个严重的问题.我并不太关心"准确性",因为结果相互匹配.我试着开关/fp在VS模式strictprecise,但这似乎并没有解决它.

我应该考虑采用哪些其他途径来进行此计算,在两个平台上都有相同的结果?

更新:有趣的是,如果我更改这样的代码,它会跨平台匹配:

#include <cmath>
#include <cstdio>

int main()
{
    int xm = 0x3f18492a;
    float x = *(float*)&xm;
    //x = (sqrt(x) + 1) / 2.0f;
    float y = sqrt(x);
    float z = y + …
Run Code Online (Sandbox Code Playgroud)

c c++ floating-point gcc visual-studio-2010

7
推荐指数
2
解决办法
7077
查看次数

将排序的Ruby数组转换为具有可能重复的排名

我在Ruby中有以下数字数组(越高越好),我想对它们进行排名.换句话说,我想转换以下排序列表:

[89 52 52 36 18 18 5]
Run Code Online (Sandbox Code Playgroud)

到以下职级:

[1 2 2 4 5 5 7]
Run Code Online (Sandbox Code Playgroud)

例如,获胜者获得第一名,第二名获得并列,依此类推.显然,重要的一点是,关系是可能的,那些关系必须跳过相应的级别.任何数量的关系都是可能的(3人分享第二名).

有没有一种优雅的方式来执行这种操作?

ruby arrays

7
推荐指数
3
解决办法
1040
查看次数

"无法在Android Studio中获取文件的编译器信息..."

我在Android Studio中遇到了这个非常奇怪的错误消息.它显示在我使用Gradle 构建的本机代码之上ndk-build.断点和代码步进正常工作,但代码中充斥着"无法解决变量"之类的"错误".

以下是它的外观示例:

在此输入图像描述

同样,代码都运行正常,就像IDE似乎无法解析一大堆类型.您可以在右侧看到一连串的错误.基本上每一行都被标记为错误,即使它们都编译得很好.不知道发生了什么!

android android-ndk android-studio

7
推荐指数
1
解决办法
2664
查看次数

C++标准库方法,用于删除列表中满足条件的一对项目之一

想象一下,你有std::list一组值.为了示范,我们会说它只是std::list<int>,但就我而言,它们实际上是2D点.无论如何,我想删除满足某种距离标准的一对 int s(或点)中的一个.我的问题是如何将此作为迭代,而不是O(N ^ 2)操作.

Source是一个int包含以下内容的列表:

{ 16, 2, 5, 10, 15, 1, 20 }

如果我给出了这个距离标准1(即列表中的项目不应该在1任何其他项目中),我想产生以下输出:

{ 16, 2, 5, 10, 20 }如果我向前迭代

{ 20, 1, 15, 10, 5 } 如果我向后迭代

我觉得必须有一些很棒的方法来做到这一点,但我坚持使用这个迭代器的双循环并尝试在迭代列表时擦除项目.

c++ algorithm iterator stl std

6
推荐指数
1
解决办法
335
查看次数

在Rails ActiveRecord验证期间更改或更新属性值

简介:我正在尝试自定义ActiveModel::EachValidator验证器中更改属性的值.鉴于以下原型:

def validate_each(record, attribute, value)

试图设置value = thing似乎没有做任何事情 - 我错过了什么?应该有一个聪明的方法来做到这一点......

细节:我接受URL输入作为网站的一部分.我不想只是采取URL,并直接验证它返回一个200 OK消息,因为这会忽略没下手的条目http,或者留出了领先www,等我有一些自定义的逻辑来处理这些错误,并按照重定向.因此,如果用户键入而不是,我希望验证成功.逻辑在验证中正常工作,但问题是如果有人在前者中键入,则数据库中的存储值是"错误"形式而不是更新好的形式.我可以在验证过程中将条目更改为更规范的表单吗?example.org/articlehttp://www.example.org/article

ruby validation activerecord ruby-on-rails activemodel

6
推荐指数
1
解决办法
4335
查看次数