小编Kyl*_*Fox的帖子

登录Sinatra?

我无法弄清楚如何使用Sinatra记录消息.我不打算记录请求,而是在我的应用程序中的某些点上自定义消息.例如,在获取我想要记录的URL时"Fetching #{url}".

这是我想要的:

  • 指定日志级别的能力(例如:logger.info("Fetching #{url}"))
  • 在开发和测试环境中,消息将写入控制台.
  • 在生产中,只写出与当前日志级别匹配的消息.

我猜这可以很容易地在做config.ru,但我不是100%肯定,我想启用该设置,如果我必须手动创建一个Logger对象本人(以及此外,该级Logger使用方法:Logger,Rack::Logger,或Rack::CommonLogger) .

(我知道在StackOverflow上有类似的问题,但似乎都没有直接回答我的问题.如果你能指出我现有的问题,我会把这个问题标记为副本).

ruby logging rack sinatra

53
推荐指数
3
解决办法
5万
查看次数

是否可以从coverage.py报告中排除测试目录?

我是一个有python单元测试的新手,尤其是coverage.py.覆盖报告是否包含实际测试文件的覆盖范围是否可取?

以下是我的HTML报告的屏幕截图作为示例.

您可以看到该报告包含tests/test_credit_card.起初我试图tests/从报告中省略目录,如下所示:

coverage html --omit=tests/ -d tests/coverage
Run Code Online (Sandbox Code Playgroud)

我尝试了该命令的几种变体,但我不能为我的生活得到测试/排除.在接受失败后,我开始怀疑是否应该将测试文件包含在报告中.

任何人都可以对此有所了解吗?

python testing code-coverage software-quality coverage.py

45
推荐指数
5
解决办法
2万
查看次数

如何在不使用Storyboard的情况下在UITableView中使用静态单元格?

我的项目中有一个现有的ViewController + xib,现在我想添加一个带静态单元格的UITableView,如下所示:

TableView与静态单元格

但是当我将UITableView拖到我的屏幕上时,我没有在Attributes Inspector中有"Content> Static"菜单.

我已经尝试制作我的控制器子类UITableViewController,但这没有帮助 - 我仍然没有选择在Attributes Inspector中使用静态单元格.

我查看了StackOverflow,但没有找到这个问题的任何现有答案.所有现有问题都与Storyboard(我没有使用)有关,而不是xib文件.

我的猜测是,当你将一个UITableViewController添加到一个故事板时,Xcode会产生某种魔力,但是当你将现有的xib更改为从UITableViewController继承时,它不会.

有关如何将静态单元格的表格视图添加到现有xib的任何建议吗?

uitableview ios

31
推荐指数
2
解决办法
2万
查看次数

Python无法在Mac OSX上找到distutils_path

我一直在使用virtualenv + pip进行python开发.我不确定发生了什么,但每当我尝试运行命令行工具或导入库时,我都会收到以下错误消息:

Traceback (most recent call last):
  File "/Users/kyle/.virtualenvs/fj/bin/pip", line 4, in <module>
    import pkg_resources
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 698, in <module>
    the platform/python version defined at initialization are added.
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 701, in Environment
    search_path = sys.path
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 96, in get_supported_platform
    'Environment', 'WorkingSet', 'ResourceManager',
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 221, in get_build_platform
    if provDarwin:
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/distutils/__init__.py", line 14, in <module>
    exec open(os.path.join(distutils_path, '__init__.py')).read()
IOError: [Errno 2] No such file or directory: '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/__init__.py'
Run Code Online (Sandbox Code Playgroud)

从我可以破译的内容来看,Python试图distutils_path在Mac OSX系统版本中找到Python,而不是像我应该的那样的virtualenv版本. …

python macos distutils virtualenv

21
推荐指数
3
解决办法
8174
查看次数

如何在开发过程中将Bundler/Gemfile配置为使用不同的gem源?

我有一个Sinatra应用程序,需要我在本地开发的另一个gem.我在配置Bundler以在开发过程中使用我的本地gem代码时遇到了麻烦,但我在生产中使用了我的宝石代码.

理想情况下我可以这样做,但Bundler不允许你指定两次相同的gem:

# Doesn't work:
group :development do
  gem 'awesome', :path => "~/code/awesome"
end

group :production do
  gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
end
Run Code Online (Sandbox Code Playgroud)

与此同时,我每次部署时都会手动出售gem并更新Gemfile中的gem源,这非常麻烦.我的工作流程如下:

  1. 在开发期间指向我的本地gem(gem 'awesome', :path => "~/code/awesome")
  2. 准备部署时,将gem解压缩 vendor/gems
  3. 更新Gemfile以指向vendored gem(gem 'awesome', :path => "vendor/gems/awesome-0.0.1")
  4. 运行bundle install(更新Gemfile.lock)
  5. 部署代码
  6. 返回第1步.

太麻烦了!我想做一些更简洁的事情,而不仅仅是编写Rake任务来自动化我当前的设置.

这种情况的最佳工作流程是什么?

ruby gem rubygems bundler gemfile

14
推荐指数
2
解决办法
6099
查看次数

工头不与NGINX合作

我正在尝试使用Foreman(版本0.31.0)来管理我们的应用程序的进程,但我对nginx(nginx/1.0.10 + Phusion Passenger 3.0.11)没有太多运气.

这是我的Procfile中的相关行:

nginx: sudo /home/ubuntu/nginx/sbin/nginx
Run Code Online (Sandbox Code Playgroud)

当我启动应用程序时,Foreman报告nginx已启动,然后立即终止:

$ foreman start
21:18:28 nginx.1   | started with pid 27347
21:18:28 nginx.1   | process terminated
21:18:28 system    | sending SIGTERM to all processes
Run Code Online (Sandbox Code Playgroud)

但是,即使Foreman另有报告,nginx实际上仍在运行.


同样,如果我导出到Upstart:

rvmsudo foreman export upstart /etc/init -a my_app -u ubuntu
Run Code Online (Sandbox Code Playgroud)

并运行sudo start my_app,nginx正常启动.但sudo stop my_app 不会阻止nginx.它继续运行.

让nginx与Foreman合作是否有诀窍?

注意:我发现Foreman的这个问题,我想知道它是否相关.

passenger nginx upstart foreman

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

Shoulda + FactoryGirl:我可以更快地进行测试吗?

我正在寻找一种方法来加速我的Shoulda + FactoryGirl测试.

我试图测试的模型(StudentExam)与其他模型有关联.在创建之前,这些关联对象必须存在StudentExam.出于这个原因,它们是在中创建的setup.

但是,我们的一个模型(School)需要很长时间才能创建.因为setup每一个之前被调用should语句时,整个测试用例需要亿万年来执行-它创建了一个新的@school,@student,@topic@exam每一个应声明执行.

我正在寻找一种创建一次这些对象的方法.是否有类似startupfor before_all方法的东西可以让我创建记录,这些记录会在测试用例的其余部分持续存在?

基本上我之前正在寻找与RSpec 之前完全相同的东西(:全部).我不关心依赖的问题,因为这些测试永远不会修改那些昂贵的对象.

这是一个示例测试用例.为长代码道歉(我也创造了一个要点):

# A StudentExam represents an Exam taken by a Student.
# It records the start/stop time, room number, etc.
class StudentExamTest < ActiveSupport::TestCase

  should_belong_to :student
  should_belong_to :exam

  setup do
    # These objects need to be created before we …
Run Code Online (Sandbox Code Playgroud)

testing ruby-on-rails shoulda factory-bot

5
推荐指数
1
解决办法
1130
查看次数

控制器执行两次ui-router嵌套状态(Ionic)

问题

My Ionic应用程序使您可以从侧面菜单中选择一个项目,然后在主要内容区域中显示两个选项卡(任务,消息)。任务和消息选项卡是项目的嵌套状态。

在侧面菜单中更改项目时,TaskListCtrl将执行两次。在项目之间进行切换时,请观看实时演示并观看控制台。我也有一个视频,详细显示了该问题。

如何停止TaskListCtrl执行两次?有没有一种更好的方法可以构造这些嵌套状态?

完整代码在GitHub上»

这是我的$stateProvider配置:

.state('project', {
  url: "/projects/:projectID",
  abstract: true,
  cache: false,
  controller: 'ProjectDetailCtrl',
  templateUrl: "templates/project.tabs.html",
  resolve: {
    project: function($stateParams, Projects) {
      return Projects.get($stateParams.projectID);
    }
  }
})

.state('project.tasks', {
  url: '/tasks',
  views: {
    'tasks-tab': {
      templateUrl: 'templates/task.list.html',
      controller: 'TaskListCtrl'
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

和相关的摘录来自controllers.js

.controller('ProjectDetailCtrl', function($scope, project) {
  $scope.project = project;
  console.log('=> ProjectDetailCtrl (' + $scope.project.name + ')')
})

.controller('TaskListCtrl', function($scope, $stateParams) { …
Run Code Online (Sandbox Code Playgroud)

angularjs angular-ui-router ionic-framework

5
推荐指数
1
解决办法
1441
查看次数