copycopter / copycopter-ruby-client Goto Github PK
View Code? Open in Web Editor NEWEdit copy in your live web app.
Home Page: http://copycopter.com
License: MIT License
Edit copy in your live web app.
Home Page: http://copycopter.com
License: MIT License
I was setting up an install in a new app today, and I admittedly got the steps a little out of order, but it was a little weird to have to tail the logs on the copycopter server to figure it out...
Started POST "/api/v2/projects/[snip]/deploys" for 127.0.0.1 at 2012-11-12 18:34:10 +0000
Processing by Api::V2::DeploysController#create as */*
Parameters: {"project_id"=>"[snip]"}
Completed 500 Internal Server Error in 5ms
ActiveRecord::StatementInvalid (PG::Error: ERROR: syntax error at or near ")"
LINE 11: AND localizations.id IN ();
^
: UPDATE localizations
SET published_version_id = latest_version.id,
published_content = latest_version.content,
updated_at = '2012-11-12 18:34:10.075543'
FROM (
SELECT DISTINCT ON (localization_id) localization_id, id, content
FROM versions ORDER BY localization_id DESC, id DESC
) AS latest_version
WHERE latest_version.localization_id = localizations.id
AND localizations.id IN ();
):
app/models/localization.rb:56:in `publish'
app/models/project.rb:50:in `deploy!'
app/controllers/api/v2/deploys_controller.rb:3:in `create'
Once I added a blurb to a view in the project and loaded the page, the deploy rake task worked fine, but a 500 error made me sad. I'll fix it a little later when I've got more time, but if anyone wants to take a stab at it, by all means! 😄
Remove cert?
We have the following in a YAML file:
type:
- 'VISA'
- 'MasterCard'
- 'American Express'
- 'Diners Club'
- 'Discover'
Is it possible to add support for working with arrays in copycopter?
I want my config/initializers/copycopter.rb
to look like this:
CopycopterClient.configure do |config|
config.api_key = ENV['COPYCOPTER_API_KEY']
end
In this particular instance, the reason is because I want to use Copycopter in an app that will soon be open sourced. However, I think it's cleaner in general to think in terms of having config variables as separate from the source code. Heroku provides them and you can use them locally with foreman in the .env
file. However, the two cases that .env
or config variables aren't available are in the test suite and during rake assets:precompile
when deploying to Heroku. It'd be sweet if Copycopter just printed a warning instead of throwing an error, which blows up the deploy and makes for an unsatisfying end to a test run.
We have a bunch of required fields and use the rails-i18n gem to get localizations of "has to be filled out", "must be larger/smaller than...", etc. And that works great.
But copycopter seems to be bleeding the from one locale to another. I'm digging into the problem, and it seems to come from the client and it seems to matter which language you get the error message in first.
I think it goes something like:
en:
activerecord:
errors:
models:
book:
attributes:
title:
blank: muss ausgefüllt werden
All the translations for that model show up, but it is getting the German error message
The issue here is that what (lazy) loads translations is when we use the rails I18n#translate call. However, we're relying on config/locales/en.yml to push data to the copycopter_client's cache (to be later sync'ed) so that we can use them from the client side. Therefore there's nowhere in the app where we call I18n#t.
We should make the copycopter client load those translations automatically. Possibly make it configurable if there are any concerns with that.
Any other suggestions?
We wanted to test migrating to rails 3.1, but Rails 3.1 depends on i18n 0.6.0beta1, which conflicts with copycopter_client's i18n ~> 0.5.0 dependency.
I've followed Ryan Bates screencast on setting up copycopter and have deployed both the server and client application utilising Copycopter to heroku.
I can run copycopter locally, but when I then push the git repo to Heroku which includes Copycopter client I get the service crashing.
I have an included .rvmrc file, and do not have enough experience with Heroku to know whether to include this and if it may be contributing to my problem.
I'm running on ruby-1.9.2-p290 with Rails 3.2.3 and the latest version of Copycopter (2.0.1).
The error message I receive when view the log files is as follows:
Vigor16:GDemo railsdev$ heroku ps
Process State Command
web.1 crashed for 1s bundle exec rails server -p $PORT
Vigor16:GDemo railsdev$ heroku logs
2012-04-17T13:10:55+00:00 app[web.1]: from /app/config.ru:1:in `new'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
2012-04-17T13:10:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
2012-04-17T13:10:55+00:00 app[web.1]: from script/rails:6:in `<main>'
2012-04-17T13:10:55+00:00 app[web.1]: from script/rails:6:in `require'
2012-04-17T13:10:56+00:00 heroku[web.1]: Process exited with status 1
2012-04-17T13:10:56+00:00 heroku[web.1]: State changed from starting to crashed
2012-04-17T13:10:56+00:00 heroku[web.1]: State changed from crashed to created
2012-04-17T13:10:56+00:00 heroku[web.1]: State changed from created to starting
2012-04-17T13:11:02+00:00 heroku[web.1]: Starting process with command `bundle exec rails server -p 5208`
2012-04-17T13:11:05+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5)
2012-04-17T13:11:05+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5)
2012-04-17T13:11:05+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5)
2012-04-17T13:11:08+00:00 app[web.1]: => Rails 3.2.3 application starting in production on http://0.0.0.0:5208
2012-04-17T13:11:08+00:00 app[web.1]: => Booting WEBrick
2012-04-17T13:11:08+00:00 app[web.1]: => Call with -d to detach
2012-04-17T13:11:08+00:00 app[web.1]: => Ctrl-C to shutdown server
2012-04-17T13:11:08+00:00 app[web.1]: /app/config/initializers/copycopter.rb:1:in `<top (required)>': uninitialized constant CopycopterClient (NameError)
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:588:in `block (2 levels) in <class:Engine>'
2012-04-17T13:11:08+00:00 app[web.1]: Exiting
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:587:in `each'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:587:in `block in <class:Engine>'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `block in run_initializers'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/config/environment.rb:5:in `<top (required)>'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/config.ru:4:in `require'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/config.ru:4:in `block in <main>'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/config.ru:1:in `new'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/config.ru:1:in `<main>'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
2012-04-17T13:11:08+
00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
2012-04-17T13:11:08+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
2012-04-17T13:11:08+00:00 app[web.1]: from script/rails:6:in `require'
2012-04-17T13:11:08+00:00 app[web.1]: from script/rails:6:in `<main>'
2012-04-17T13:11:09+00:00 heroku[web.1]: Process exited with status 1
2012-04-17T13:11:09+00:00 heroku[web.1]: State changed from starting to crashed
2012-04-17T13:21:16+00:00 heroku[web.1]: State changed from crashed to created
2012-04-17T13:21:17+00:00 heroku[web.1]: State changed from created to starting
2012-04-17T13:21:23+00:00 heroku[web.1]: Starting process with command `bundle exec rails server -p 41445`
2012-04-17T13:21:29+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5)
2012-04-17T13:21:29+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5)
2012-04-17T13:21:29+00:00 app[web.1]: DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/config/environment.rb:5)
2012-04-17T13:21:33+00:00 app[web.1]: => Booting WEBrick
2012-04-17T13:21:33+00:00 app[web.1]: => Rails 3.2.3 application starting in production on http://0.0.0.0:41445
2012-04-17T13:21:33+00:00 app[web.1]: => Ctrl-C to shutdown server
2012-04-17T13:21:33+00:00 app[web.1]: => Call with -d to detach
2012-04-17T13:21:33+00:00 app[web.1]: Exiting
2012-04-17T13:21:33+00:00 app[web.1]: /app/config/initializers/copycopter.rb:1:in `<top (required)>': uninitialized constant CopycopterClient (NameError)
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:588:in `block (2 levels) in <class:Engine>'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:587:in `each'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:587:in `block in <class:Engine>'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `block in run_initializers'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/config.ru:4:in `require'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/config.ru:4:in `block in <main>'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/config/environment.rb:5:in `<top (required)>'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/config.ru:1:in `<main>'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/config.ru:1:in `new'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
2012-04-17T13:21:33+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
2012-04-17T13:21:33+00:00 app[web.1]: from script/rails:6:in `require'
2012-04-17T13:21:33+00:00 app[web.1]: from script/rails:6:in `<main>'
2012-04-17T13:21:34+00:00 heroku[web.1]: Process exited with status 1
2012-04-17T13:21:34+00:00 heroku[web.1]: State changed from starting to crashed
Vigor16:GDemo railsdev$
I have no ideas as to whether both services can be run from heroku. I have an OSS project that I am about to collaborate on where all the team are remote, so I thought this would be a great tool to allow our business users to review the copy and provide feedback.
Maybe I have misunderstood something.
I do notice the DEPRECATION warning but don't know where this originates. As the only difference between when I first deployed the app and now is the additiona of the copycopter.rb file in config/initializers I assume its related to copycopter.
t('1.5"', default: '1.5"') -> "1.5""
Should => "1.5""
Running rake copycopter:deploy
in my Rails 3.1 application using copycopter_client 1.1.1 fails with Timeout::Error: Timeout::Error. I do not see any other way to see which blurbs have changes in draft state or to publish them. We have experienced this from different machines on different networks throughout the day.
Trace:
** Invoke copycopter:deploy (first_time)
** Invoke environment (first_time)
** Invoke env_loaded_from_rake (first_time)
** Execute env_loaded_from_rake
** Execute environment
** Execute copycopter:deploy
rake aborted!
Timeout::Error: Timeout::Error
ruby-1.9.3-preview1@my_application_application/gems/copycopter_client-1.1.1/lib/copycopter_client/client.rb:112:in rescue in connect' ruby-1.9.3-preview1@my_application_application/gems/copycopter_client-1.1.1/lib/copycopter_client/client.rb:109:in
connect'
ruby-1.9.3-preview1@my_application_application/gems/copycopter_client-1.1.1/lib/copycopter_client/client.rb:74:in deploy' ruby-1.9.3-preview1@my_application_application/gems/copycopter_client-1.1.1/lib/copycopter_client.rb:24:in
deploy'
ruby-1.9.3-preview1@my_application_application/gems/copycopter_client-1.1.1/lib/tasks/copycopter_client_tasks.rake:4:in block (2 levels) in <top (required)>' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/task.rb:205:in
call'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/task.rb:205:in block in execute' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/task.rb:200:in
each'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/task.rb:200:in execute' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/task.rb:158:in
block in invoke_with_call_chain'
ruby-1.9.3-preview1/lib/ruby/1.9.1/monitor.rb:211:in mon_synchronize' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/task.rb:151:in
invoke_with_call_chain'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/task.rb:144:in invoke' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:112:in
invoke_task'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:90:in block (2 levels) in top_level' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:90:in
each'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:90:in block in top_level' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:129:in
standard_exception_handling'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:84:in top_level' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:62:in
block in run'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:129:in standard_exception_handling' ruby-1.9.3-preview1@global/gems/rake-0.9.2/lib/rake/application.rb:59:in
run'
ruby-1.9.3-preview1@global/gems/rake-0.9.2/bin/rake:32:in <top (required)>' ruby-1.9.3-preview1@my_application_application/bin/rake:19:in
load'
ruby-1.9.3-preview1@my_application_application/bin/rake:19:in `
I've marked one of my blurb's as published, but my production server isn't seeing the changes. This line pops up in the log occasionally:
** [Copycopter] [P:8994] [T:82457100] Downloaded translations
The dev server (running development environment), does see the changes.
This is my config file:
CopycopterClient.configure do |config|
config.api_key = ENV['COPYCOPTER_API_KEY']
config.host = ENV['COPYCOPTER_HOST']
end
Running ENV['COPYCOPTER_API_KEY']
from a rails console on the production server yields the correct key.
Using Rails 2.3 with Ruby 1.8.7, Bundler version 1.1.3
When doing a rake deploy to a Heroku Bamboo stack, after Rake Db:migrate, I get the following error:
WARNING: #<ArgumentError: Illformed requirement
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"]>
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
s.name = %q{copycopter_client}
s.version = "2.0.0"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if
s.respond_to? :required_rubygems_version=
s.authors = ["thoughtbot"]
s.date = %q{2012-03-16}
s.email = %q{[email protected]}
s.files = [".gitignore", ".rspec", ".travis.yml", "Appraisals",
"Gemfile", "Gemfile.lock", "MIT-LICENSE", "README.md", "Rakefile",
"copycopter_client.gemspec", "features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb", "gemfiles/2.3.gemfile",
"gemfiles/2.3.gemfile.lock", "gemfiles/3.0.gemfile",
"gemfiles/3.0.gemfile.lock", "gemfiles/3.1.gemfile",
"gemfiles/3.1.gemfile.lock", "init.rb", "lib/copycopter_client.rb",
"lib/copycopter_client/cache.rb", "lib/copycopter_client/client.rb",
"lib/copycopter_client/configuration.rb",
"lib/copycopter_client/errors.rb",
"lib/copycopter_client/i18n_backend.rb",
"lib/copycopter_client/poller.rb",
"lib/copycopter_client/prefixed_logger.rb",
"lib/copycopter_client/process_guard.rb",
"lib/copycopter_client/rails.rb", "lib/copycopter_client/railtie.rb",
"lib/copycopter_client/request_sync.rb",
"lib/copycopter_client/version.rb",
"lib/tasks/copycopter_client_tasks.rake",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb",
"tmp/projects.json"]
s.homepage = %q{http://github.com/copycopter/copycopter-ruby-client}
s.require_paths = ["lib"]
s.rubygems_version = %q{1.3.7}
s.summary = %q{Client for the Copycopter copy management service}
s.test_files = ["features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb"]
if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 3
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<i18n>, [">= 0.5.0"])
s.add_runtime_dependency(%q<json>, [">= 0"])
s.add_development_dependency(%q<appraisal>, ["~> 0.4"])
s.add_development_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_development_dependency(%q<bourne>, [">= 0"])
s.add_development_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_development_dependency(%q<i18n>, [">= 0"])
s.add_development_dependency(%q<rails>, ["~> 3.1.0"])
s.add_development_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_development_dependency(%q<rspec>, ["~> 2.3"])
s.add_development_dependency(%q<sham_rack>, [">= 0"])
s.add_development_dependency(%q<sinatra>, [">= 0"])
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_development_dependency(%q<thin>, [">= 0"])
s.add_development_dependency(%q<webmock>, [">= 0"])
s.add_development_dependency(%q<yard>, [">= 0"])
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
end
WARNING: Invalid .gemspec format in
'/app/.bundle/gems/ruby/1.8/specifications/copycopter_client-2.0.0.gemspec'
WARNING: #<ArgumentError: Illformed requirement
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"]>
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
s.name = %q{copycopter_client}
s.version = "2.0.0"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if
s.respond_to? :required_rubygems_version=
s.authors = ["thoughtbot"]
s.date = %q{2012-03-16}
s.email = %q{[email protected]}
s.files = [".gitignore", ".rspec", ".travis.yml", "Appraisals",
"Gemfile", "Gemfile.lock", "MIT-LICENSE", "README.md", "Rakefile",
"copycopter_client.gemspec", "features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb", "gemfiles/2.3.gemfile",
"gemfiles/2.3.gemfile.lock", "gemfiles/3.0.gemfile",
"gemfiles/3.0.gemfile.lock", "gemfiles/3.1.gemfile",
"gemfiles/3.1.gemfile.lock", "init.rb", "lib/copycopter_client.rb",
"lib/copycopter_client/cache.rb", "lib/copycopter_client/client.rb",
"lib/copycopter_client/configuration.rb",
"lib/copycopter_client/errors.rb",
"lib/copycopter_client/i18n_backend.rb",
"lib/copycopter_client/poller.rb",
"lib/copycopter_client/prefixed_logger.rb",
"lib/copycopter_client/process_guard.rb",
"lib/copycopter_client/rails.rb", "lib/copycopter_client/railtie.rb",
"lib/copycopter_client/request_sync.rb",
"lib/copycopter_client/version.rb",
"lib/tasks/copycopter_client_tasks.rake",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb",
"tmp/projects.json"]
s.homepage = %q{http://github.com/copycopter/copycopter-ruby-client}
s.require_paths = ["lib"]
s.rubygems_version = %q{1.3.7}
s.summary = %q{Client for the Copycopter copy management service}
s.test_files = ["features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb"]
if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 3
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<i18n>, [">= 0.5.0"])
s.add_runtime_dependency(%q<json>, [">= 0"])
s.add_development_dependency(%q<appraisal>, ["~> 0.4"])
s.add_development_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_development_dependency(%q<bourne>, [">= 0"])
s.add_development_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_development_dependency(%q<i18n>, [">= 0"])
s.add_development_dependency(%q<rails>, ["~> 3.1.0"])
s.add_development_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_development_dependency(%q<rspec>, ["~> 2.3"])
s.add_development_dependency(%q<sham_rack>, [">= 0"])
s.add_development_dependency(%q<sinatra>, [">= 0"])
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_development_dependency(%q<thin>, [">= 0"])
s.add_development_dependency(%q<webmock>, [">= 0"])
s.add_development_dependency(%q<yard>, [">= 0"])
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
end
WARNING: Invalid .gemspec format in
'/app/.bundle/gems/ruby/1.8/specifications/copycopter_client-2.0.0.gemspec'
Currently experiencing the following error with every version of active_admin from 0.4.0 to current master (this exception taken while using master):
/Users/robertmay/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.0/lib/active_support/inflector/methods.rb:97:in `block in humanize': undefined method `downcase' for nil:NilClass (NoMethodError)
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.0/lib/active_support/core_ext/string/output_safety.rb:160:in `gsub'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.0/lib/active_support/core_ext/string/output_safety.rb:160:in `gsub'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.0/lib/active_support/inflector/methods.rb:97:in `humanize'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.0/lib/active_support/inflector/methods.rb:112:in `titleize'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.0/lib/active_support/core_ext/string/inflections.rb:95:in `titleize'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/resource/naming.rb:23:in `resource_label'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/resource/naming.rb:32:in `plural_resource_label'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/batch_actions/resource_extension.rb:52:in `add_default_batch_actions'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/batch_actions/resource_extension.rb:9:in `initialize'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/namespace.rb:130:in `new'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/namespace.rb:130:in `find_or_build_resource'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/namespace.rb:50:in `register'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin/application.rb:100:in `register'
from /Users/robertmay/.rvm/gems/ruby-1.9.3-p125/bundler/gems/active_admin-c183c89f1c69/lib/active_admin.rb:74:in `register'
from /Users/robertmay/Development/Rails/BPB/app/admin/articles.rb:1:in `<top (required)>'
I deleted my tmp
and am now getting Timeout::Error: execution expired.
** [Copycopter] [P:79066] [T:70241002134060] Timeout::Error: execution expired
** [Copycopter] [P:79066] [T:70241002133200] Timeout::Error: execution expired
** [Copycopter] [P:79066] [T:70241002133200] Timeout::Error: execution expired
It blocks my HTTP requests, at least in development environment. I would expect it to fallback to the default and timeout "quickly", no? Does it work the same in production, ie. when copycopter is having a problem I get a site that's down?
Rails 3.1.3, asset pipeline disabled.
Hi, I don't know if it's only my problem, but probably most of teams can have issues when adding copycopter to existing project which have 2K+ translations. There are basically two problems:
Each of those occurs when you want to send and store a large piece of translations. We could put it either on the client side or server side.
The first option could probably look something like making chunks from data, and posting one after another, we don't need a background job because from what I see the client work in second thread anyway.
The second option would probably involve something similar, so getting the missing translations, saving them as plain text in db, and then in background split them into batches, and save it within smaller transactions. Maybe we could also use batch inserts?
I would opt in to implement it. I already have a working prototype on client side, but probably it would be better to make it within copycopter-server. I will investigate it further on weekend, but it would be nice if someone would give me an general quick overview of connection between client and server. So i.e. if it checks missing keys after downloading them from server, or it just push everything there on startup, also what I should be aware of when making it.
What do you think? Hopefully some maintainer will take a look ;>
After I added copycopter_client to my rails application, I noticed an interesting side-effect.
The rails process doesn't start properly unless it's slowed down a bit after CopycopterClient.configure. Just adding sleep 2 after configuration allows rails to start normally.
The logs can easily be used to identify when the problem occurs. Without the sleep clause "Downloaded translations" message doesn't appear in the log and rails doesn't respond at all.
I currently don't have anything to go on to further debug this issue.
My copycopter initializer contains:
CopycopterClient.configure do |config|
config.api_key = 'mykey'
config.host = 'my-copycopter.herokuapp.com'
end
sleep 1
This issue is seen with rails 3.2.6 and ruby 1.9.3
$rake copycopter:deploy
rake aborted!
Timeout::Error: Timeout::Error
Tasks: TOP => copycopter:deploy
(See full trace by running task with --trace)
We have a fairly large project. I have no way of knowing if the deploy actually finishes eventually or not. Either way, it probably needs to be faster and/or have the timeout extended.
Stack trace:
/Users/aaronjensen/.rvm/gems/ruby-1.9.2-p290/gems/copycopter_client-1.1.1/lib/copycopter_client/client.rb:112:in `rescue in connect'
/Users/aaronjensen/.rvm/gems/ruby-1.9.2-p290/gems/copycopter_client-1.1.1/lib/copycopter_client/client.rb:109:in `connect'
/Users/aaronjensen/.rvm/gems/ruby-1.9.2-p290/gems/copycopter_client-1.1.1/lib/copycopter_client/client.rb:74:in `deploy'
/Users/aaronjensen/.rvm/gems/ruby-1.9.2-p290/gems/copycopter_client-1.1.1/lib/copycopter_client.rb:24:in `deploy'
/Users/aaronjensen/.rvm/gems/ruby-1.9.2-p290/gems/copycopter_client-1.1.1/lib/tasks/copycopter_client_tasks.rake:4:in `block (2 levels) in <top (required)>'
It takes anywhere from 3-7 seconds usually for copycopter to check for updates to strings. I don't know if it's because our app has grown to the point where the dump is several MB or what, but it makes the development environment unusable. Furthermore, in order to disable the refresh we have to set the development environments to []
which has the unfortunate side effect of not updating the server whenever we add a new key. So we really need to manually switch between running in "development" (according to copycopter) and not.
Is there a way to speed things up and/or have a hybrid environment in which new strings will get pushed to the server but it won't check for updates every request?
class Driver
validates :age, numericality =>
{
:greater_than_or_equal_to => lambda {|o| o.in_europe? ? 21 : 18 }
}
end
Will get the first age and cache it, ignoring the lambda forever after.
The validation works correctly - just not the message.
Is there any way to turn off the logging or at least, pipe it to another log file?
The gem should probably be able to handle the following rubies:
The gem should also handle currently supported versions of Rails:
With the release of Rails 4.0 and the core teams decision to no longer support Ruby 1.8.X, I think we can fully remove support as well. For now we can indicate that Ruby 1.8.7 is being deprecated.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.